如果禁用日志级别,如何防止日志消息中的字符串生成器

时间:2019-04-02 14:37:28

标签: java performance logging

在日志级别高于调试级别的情况下,当我在代码中有一条日志消息(例如logger.debug("Some message {}", someFunction());)时,我现在已经构建了一个字符串,并无故调用了someFunction()。我已经习惯了C ++,在那里我会使用一些宏来在实际调用logger.debug(...)之前检查日志级别,但是Java中似乎没有等效的解决方案。我正在寻找防止使用以下代码填充代码的想法:

if (logger.isDebugEnabled()) {
    logger.debug("Some message {}", someFunction());
}

对于每条日志消息。 任何建议都将受到欢迎。

1 个答案:

答案 0 :(得分:4)

从Log4j 2.4开始,您可以使用logger.debug("Some message {}", () -> someFunction());。仅当日志级别设置为someFuction()或更低时(参见this link。)才会懒惰地对此进行评估,并且将调用方法DEBUG