在日志级别高于调试级别的情况下,当我在代码中有一条日志消息(例如logger.debug("Some message {}", someFunction());
)时,我现在已经构建了一个字符串,并无故调用了someFunction()
。我已经习惯了C ++,在那里我会使用一些宏来在实际调用logger.debug(...)
之前检查日志级别,但是Java中似乎没有等效的解决方案。我正在寻找防止使用以下代码填充代码的想法:
if (logger.isDebugEnabled()) {
logger.debug("Some message {}", someFunction());
}
对于每条日志消息。 任何建议都将受到欢迎。
答案 0 :(得分:4)
从Log4j 2.4开始,您可以使用logger.debug("Some message {}", () -> someFunction());
。仅当日志级别设置为someFuction()
或更低时(参见this link。)才会懒惰地对此进行评估,并且将调用方法DEBUG
。