我有一个关于日志记录的简单问题,为什么使用这种语法进行日志记录很常见:
LOG.debug("invalidate {}",_clusterId);
不是这个:
LOG.debug("invalidate" + _clusterId);
在您的示例中,假设您已将日志记录级别设置为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] 删除。
我来说两句