尽管在某些教程中,例如此处( 参数化日志记录 部分),他说Logback消息{}参数化可以帮助我们避免 在日志数据中进行不必要的计算 (如果日志记录级别不是DEBUG):
{}
logger.debug("The bonus for employee {} is {}", employee.getName(), employeeService.calculateBonus(employee));
我测试(的logback上的版本1.2.3),这个优化仅适用于不必要的toString()参数对象的- 因为这作品的 log4j的 。
1.2.3
toString()
Logback 文档未涵盖此详细信息。
因此,我们必须对所有“昂贵”的日志记录使用isDebugEnabled(),对吗?
看这里的例子
从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());