在这里使用 if 语句有什么意义?可以在 log4j.xml 配置文件中更改严重级别。如果严重级别是调试,它将记录调试消息,否则不会。
下面的if语句有什么意义?
if (log.isDebugEnabled())
{
log.debug("I am logging something");
}
在您的示例中,不需要“if”语句(“if”之间不是循环)
但是如果你看下面的例子,你可以看到我们做了一个连接,如果日志级别是 info,那么这个连接操作就会不必要地完成。为了获得更好的性能,我们检查这个条件。
if (log.isDebugEnabled())
{
log.debug("I am logging " + 1234 + ".");
}
额外信息:
使用 slf4j 来避免这种 if 条件。上面的语句在 slf4j 中可以改写如下,
log.debug("I am logging {} .", 1234);
这被认为是良好的做法。例如,如果存在一些字符串连接,则不会在 log4j 中对其进行评估和检查,而是首先对其进行检查。
例子:
if ( log.isDebugEnabled() ) {
log.debug( "N=" + N + ", a=" + Arrays.toString( a ) );
}
Arrays.toString()
如果未启用调试,则不执行方法和连接。如果没有if
,则首先调用它并稍后检查,仅此而已;-)
我的观点是,当您的示例中有简单的 String 时,不需要围绕日志记录的 if,如果有更复杂的东西(在我的示例中甚至更复杂),这可以在生产模式下节省一些 CPU 时间(没有调试模式启用)。
您还必须意识到,在连接的情况下,如果您认为它没有调用任何业务逻辑String.valuOf()
(toString()
因此它是“无用的”)。
这是一个性能优化。这样做是为了避免评估log.debug
. 只有在构建日志消息特别昂贵(例如序列化 XML 文档)时才值得这样做。
这在log4j 的简短介绍中有一些详细介绍。