何时使用log4j的isDebugEnabled属性来进行日志记录?
2010-04-16 09:45
513 查看
以前知道这个问题,但没有去了解它,这次看到一个网页,说明了事实的真相,所以转载过来。
===============================================================
我经常见到这个问题,到底使不使用idDebugEnabled属性。这个问题经常被争论,而焦点往往是性能。
答案很简单。既然有这个属性,当然是拿来使用的。但是使用的时候需要注意。
例如,在我的代码中,我如下使用。
Java代码
log.debug(
"I am there"
);
这个例子是一个好的实践。
然而如果我按照如下的方式来使用,我觉得就是不必要的了。
Java代码
// Not good practise
if
(log.isDebugEnabled()){
log.debug(
"I am there"
);
}
那么是为什么呢?这是因为类Category中的debug方法(由Log4j库的Logger类继承)已经检查了日志中的模式(即当前的日志级
别)。org.apache.log4j.Category类中debug的代码如下:
Java代码
public
void
debug(Object message) {
if
(repository.isDisabled(Level.DEBUG_INT))
return
;
if
(Level.DEBUG.isGreaterOrEqual(
this
.getEffectiveLevel())) {
forcedLog(FQCN, Level.DEBUG, message,
null
);
}
}
因此上面的例子中,我们可以不使用它来判断。那么什么时候需要使用isDebugEnabled属性呢?
例如,你有一个很 长的参数要在debug模式下输出:
Java代码
// Bad Practise
log.debug(
"XML "
+Tree.getXMLText());
在这样的情况下,可以清楚的说,不要使用它。如果Tree.getXMLText方法从App中获取出来,但是没有使用的话,这样对性能会有很大的
影响。因此,应该按照如下的方式来使用:
Java代码
// Good Practise
if
(log.isDebugEnabled()){
log.debug(
"XML "
+Tree.getXMLText());
}
因此,在上面的例子中,使用log.isDebugEnabled()可以保证性能优化。
===============================================================
我经常见到这个问题,到底使不使用idDebugEnabled属性。这个问题经常被争论,而焦点往往是性能。
答案很简单。既然有这个属性,当然是拿来使用的。但是使用的时候需要注意。
例如,在我的代码中,我如下使用。
Java代码
log.debug(
"I am there"
);
这个例子是一个好的实践。
然而如果我按照如下的方式来使用,我觉得就是不必要的了。
Java代码
// Not good practise
if
(log.isDebugEnabled()){
log.debug(
"I am there"
);
}
那么是为什么呢?这是因为类Category中的debug方法(由Log4j库的Logger类继承)已经检查了日志中的模式(即当前的日志级
别)。org.apache.log4j.Category类中debug的代码如下:
Java代码
public
void
debug(Object message) {
if
(repository.isDisabled(Level.DEBUG_INT))
return
;
if
(Level.DEBUG.isGreaterOrEqual(
this
.getEffectiveLevel())) {
forcedLog(FQCN, Level.DEBUG, message,
null
);
}
}
因此上面的例子中,我们可以不使用它来判断。那么什么时候需要使用isDebugEnabled属性呢?
例如,你有一个很 长的参数要在debug模式下输出:
Java代码
// Bad Practise
log.debug(
"XML "
+Tree.getXMLText());
在这样的情况下,可以清楚的说,不要使用它。如果Tree.getXMLText方法从App中获取出来,但是没有使用的话,这样对性能会有很大的
影响。因此,应该按照如下的方式来使用:
Java代码
// Good Practise
if
(log.isDebugEnabled()){
log.debug(
"XML "
+Tree.getXMLText());
}
因此,在上面的例子中,使用log.isDebugEnabled()可以保证性能优化。
相关文章推荐
- 何时使用log4j的isDebugEnabled属性来进行日志记录?
- tomcat7 使用log4j进行日志记录
- java使用log4j进行日志记录
- tomcat7 使用log4j进行日志记录
- 使用Log4j进行日志记录
- 使用log4j进行日志记录
- 使用log4j进行日志记录
- 关于log4j按照日期记录日志,使用DatePattern属性的解惑
- Spring Cloud Spring Boot mybatis分布式微服务云架构(三十八)使用log4j记录日志
- 使用Log4j进行日志操作【转】
- 使用 log4j 2记录日志
- Java 使用Log4J进行日志操作
- 在spring-mvc中使用aop进行业务日志的记录
- 使用Log4j进行日志操作
- 在Spring项目中使用Log4j添加日志记录及异常单独保存配置
- 使用Log4J进行日志操作时的配置详解
- 使用Log4j进行日志操作
- 使用 logback + slf4j 进行日志记录
- [EntLib]微软企业库5.0 学习之路——第九步、使用PolicyInjection模块进行AOP—PART4——建立自定义Call Handler实现用户操作日志记录
- 使用Log4j进行日志操作