需要帮助了解Logback的参数化日志记录优化

时间:2016-12-02 07:33:26

标签: java logback

The logback parameterized logging docs says

Object entry = new SomeObject();
logger.debug("The entry is {}.", entry);
     

只有在评估是否记录之后,才会进行记录   决定是积极的,将记录器实现格式化   消息并用条目的字符串值替换{}对。在   换句话说,这种形式不会产生参数成本   禁用日志语句时的构造。

我对此的解释是,如果记录器设置为entry,则DEBUG根本不会被评估。但那怎么可能呢?

换句话说,如果我写了:

logger.debug("the entry is {}.", dbService.getEntry());

如果记录器未设置为dbService.getEntry(),我认为不会调用DEBUG。我的理解是否正确?

1 个答案:

答案 0 :(得分:3)

该语句意味着只有在启用日志级别时才会构建格式化消息,包括在toString() 上调用entry的费用。 “参数构造”这个词的选择具有误导性。它仅指汇编格式化的消息。

如果您的代码执行昂贵的操作来构造传递给记录器的值,则无论是否启用日志级别,您每次都会产生费用。例如

logger.debug("The entry is {}.", entry.someVeryExpensiveOperation());

这是标准的Java,没有什么魔法发生。每次都会调用someVeryExpensiveOperation()