apache.commons.logging.log 没有调试日志代码保护的性能
apache.commons.logging.log performance without debug logging code guard
apache.coomons.logging.Log.Log2JLogger 提供代码保护,例如 log.IsDebugEnabled()
。但是,可以继续调用 log.debug(message)
如果未配置调试级别,我们将看不到这些消息。
从性能的角度来看,特别是考虑到我们想将这些调试消息留给生产调试,在尝试记录之前调用这些代码保护是否被认为是最佳实践?
例如,这会被视为最佳做法吗?
if log.isDebugEnabled()
log.debug("trouble brewing...");
或者调用
log.debug("I'll slow you down...");
已经为我们做了这个?
如果为日志方法创建参数的成本很高,那么您应该先调用保护方法。在您给出的示例中,没有意义,因为静态字符串没有性能成本,并且正如您正确推测的那样,日志框架在决定是否记录之前无论如何都会进行检查。
但请考虑以下几点;
logger.debug(myObject.someMethod());
在这种情况下,myObject.someMethod()
将被调用 在 之前,记录器从它接收 return 值。如果该方法执行冗长的操作,那么无论记录器是否启用调试,您都将遭受性能损失。在这种情况下,您会希望在进行该调用之前使用isDebugEnabled()
。
apache.coomons.logging.Log.Log2JLogger 提供代码保护,例如 log.IsDebugEnabled()
。但是,可以继续调用 log.debug(message)
如果未配置调试级别,我们将看不到这些消息。
从性能的角度来看,特别是考虑到我们想将这些调试消息留给生产调试,在尝试记录之前调用这些代码保护是否被认为是最佳实践?
例如,这会被视为最佳做法吗?
if log.isDebugEnabled()
log.debug("trouble brewing...");
或者调用
log.debug("I'll slow you down...");
已经为我们做了这个?
如果为日志方法创建参数的成本很高,那么您应该先调用保护方法。在您给出的示例中,没有意义,因为静态字符串没有性能成本,并且正如您正确推测的那样,日志框架在决定是否记录之前无论如何都会进行检查。
但请考虑以下几点;
logger.debug(myObject.someMethod());
在这种情况下,myObject.someMethod()
将被调用 在 之前,记录器从它接收 return 值。如果该方法执行冗长的操作,那么无论记录器是否启用调试,您都将遭受性能损失。在这种情况下,您会希望在进行该调用之前使用isDebugEnabled()
。