【发布时间】:2020-01-14 16:24:27
【问题描述】:
虽然在一些教程中,例如here(Parametrized logging部分)说Logback消息{}参数化帮助我们避免在记录数据中不必要的计算 (如果日志级别不是 DEBUG):
logger.debug("The bonus for employee {} is {}",
employee.getName(), employeeService.calculateBonus(employee));
我测试过(在 logback 版本 1.2.3 上),此优化仅适用于参数对象的不必要的 toString() - 就像 log4j 的 works。
Logback documentation 没有涵盖这个细节。
所以,我们必须对所有“昂贵”的日志记录使用 isDebugEnabled(),对吗?
【问题讨论】:
-
链接的文章在任何地方都没有说“不必要的计算”。
{}构造有助于防止将值插入日志文本所需的字符串连接。就是这样。 -
@Andreas,你对字符串连接的看法是绝对正确的——但article 说:
...This format ensures that the logger will first verify is the log level is enabled, and only afterward will it determine and use the value of the parameters in the log message.-- 确定和使用。如果你说这篇文章,当然是 -
是的,那篇文章的作者的措辞有点误导。
calculateBonus()即使不在调试级别记录也会被调用。作为参数传递给debug()方法的值只是确定(啊,它是一个数字)和使用 i> 在调试级别记录时(转换为字符串并连接)。