记录语法详细信息

塔尼亚

我有一个关于日志记录的简单问题,为什么使用这种语法进行日志记录很常见:

LOG.debug("invalidate {}",_clusterId);

不是这个:

LOG.debug("invalidate" + _clusterId);
内森·休斯(Nathan Hughes)

在您的示例中,假设您已将日志记录级别设置为INFO。您想完全忽略调试级别的消息。但是log方法在获取参数后才能输入日志方法,然后才能检查日志级别。因此,如果您不知道是否需要某个参数,最好避免进行评估。

在第二个示例中,即使将日志记录设置为info,_clusterId也会对其调用toString,然后将所得字符串与前面的字符串连接在一起。然后,一旦输入了方法,记录器就会得出调试级别不需要记录的信息,它会丢弃新创建的字符串并退出该方法。

在第一个示例中,如果未启用调试级别的日志记录,则_clusterId不会调用toString,也不会生成日志消息。调用toString可能会很慢,或者会造成垃圾,最好在任何情况下都不会记录任何情况的情况下避免使用它。

这是log4j的org.apache.log4j.Category(它是Logger的超类)上的debug方法的源代码:

public void debug(Object message, Throwable t) {
  if(repository.isDisabled(Level.DEBUG_INT))
    return;

  if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel()))
    forcedLog(FQCN, Level.DEBUG, message, t);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章