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

标签 java performance logging

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

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

对于每条日志消息。 欢迎提出任何建议。

最佳答案

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

关于java - 如果禁用日志级别,如何防止日志消息中的字符串生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55477417/

相关文章:

java - Spring 数据中的 native 查询连接

java - HTML 标签正在转换

java - Log4j 不写入文件

logging - 流口水日志文件

java - 同步两个线程

mysql - 使用 JOIN 提高 SQL 查询性能

performance - SQL Server 2012 中资源监视器的高 CPU 使用率

android - 哪个性能更好 : setOnClickListener VS android:onclick ="onClick"

java - 如何使用 logback.xml 将 Apache Camel 日志级别设置为 ERROR

java - 何时在 JPA 中使用一对多或多对一