首页 > 解决方案 > apache.commons.logging.log 性能没有调试日志代码保护

问题描述

apache.coomos.logging.Log.Log2JLogger提供代码保护,例如log.IsDebugEnabled(). 但是,可以继续调用log.debug(message) ,如果未配置调试级别,我们将看不到这些消息。

从性能的角度来看,特别是考虑到我们希望将这些调试消息留给生产调试,在尝试记录之前调用这些代码保护是否被认为是最佳实践?

例如,这会被认为是最佳实践吗?

if log.isDebugEnabled()
     log.debug("trouble brewing...");

或者打电话

log.debug("I'll slow you down...");

已经为我们这样做了吗?

标签: javalog4j

解决方案


如果为 logging 方法创建参数的成本很高,那么你应该首先调用 guard 方法。在您给出的示例中,没有任何意义,因为静态字符串没有性能成本,并且正如您正确推测的那样,日志框架在决定是否记录之前无论如何都会进行检查。

但请考虑以下事项;

logger.debug(myObject.someMethod());

在这种情况下,myObject.someMethod()将在记录器从它接收返回值之前调用。如果该方法执行冗长的操作,那么无论记录器是否启用调试,您都将遭受性能损失。在这种情况下,您可能希望在isDebugEnabled()拨打电话之前使用。


推荐阅读