小编典典

使用Logback记录计算的数据时,是否应该使用isDebugEnabled()?

java

尽管在某些教程中,例如此处参数化日志记录
部分),他说Logback消息{}参数化可以帮助我们避免 在日志数据中进行不必要的计算 (如果日志记录级别不是DEBUG):

logger.debug("The bonus for employee {} is {}", 
   employee.getName(), employeeService.calculateBonus(employee));

我测试(的logback上的版本1.2.3),这个优化仅适用于不必要的toString()参数对象的-
因为这作品log4j的

Logback
文档未涵盖此详细信息。

因此,我们必须对所有“昂贵”的日志记录使用isDebugEnabled(),对吗?


阅读 308

收藏
2020-11-30

共1个答案

小编典典

这里的例子

从2.4开始,已将方法添加到Logger接口以支持lambda表达式。新方法允许客户端代码懒惰地记录消息,而无需显式检查是否启用了请求的日志级别。例如,以前一个会写:

// pre-Java 8 style optimization: explicitly check the log level
// to make sure the expensiveOperation() method is only called if necessary
 if (logger.isTraceEnabled()) {
     logger.trace("Some long-running operation returned {}", expensiveOperation());
 }

使用Java 8,可以通过lambda表达式实现相同的效果:

// Java-8 style optimization: no need to explicitly check the log level:
// the lambda expression is not evaluated if the TRACE level is not enabled
logger.trace("Some long-running operation returned {}", () -> expensiveOperation());
2020-11-30