在这里使用if语句有什么意义?可以在log4j.xml配置文件中更改严重性级别。如果严重性级别是debug,它将记录调试消息,否则不会。
下面的if语句有什么意义?
if (log.isDebugEnabled())
{
log.debug("I am logging something");
}
答案 0 :(得分:17)
在你的例子中,不需要'if'语句('if'不是循环之间)
但是如果你采用下面的例子,那么你可以看到我们进行连接,如果日志级别是信息,则不必要地进行这种连接操作。为了获得更好的性能,我们会检查这种情况。
if (log.isDebugEnabled())
{
log.debug("I am logging " + 1234 + ".");
}
额外信息:
使用slf4j来避免这种情况。上面的语句可以在slf4j中重写如下,
log.debug("I am logging {} .", 1234);
答案 1 :(得分:2)
这被认为是一种很好的做法。例如,如果存在一些字符串连接,则不会在log4j中对其进行评估和检查,但会先检查它。
示例:
if ( log.isDebugEnabled() ) {
log.debug( "N=" + N + ", a=" + Arrays.toString( a ) );
}
方法Arrays.toString()
如果未启用调试,则不会执行连接。如果没有if
,则先调用它并稍后检查,这就是全部; - )
我的观点是,当你的例子中有简单的字符串时,如果不需要日志记录,如果有更复杂的东西(在我的例子中更复杂),这可以在生产模式中节省一些CPU时间(没有启用调试模式)。
你还必须意识到,在连接的情况下,有String.valuOf()
调用(对于非空对象)调用toString()
方法,这对于大数据对象来说可能是真正的性能问题(bean许多属性)如果你认为它没有调用任何业务逻辑(因此它是“无用的”)。
答案 2 :(得分:1)
这是一项性能优化。这样做是为了避免评估log.debug
的参数。如果构建日志消息特别昂贵(例如序列化XML文档),那么这是值得做的。
Short introduction to log4j中详细介绍了这一点。