java - 没有调试日志代码保护的 apache.commons.logging.log 性能

标签 java log4j

apache.coomons.logging.Log.Log2JLogger提供代码保护,例如 log.IsDebugEnabled()。然而,我们可以直接调用 log.debug(message) 如果未配置调试级别,我们将看不到这些消息。

从性能角度来看,特别是考虑到我们希望将这些调试消息留给生产调试,在尝试记录之前调用这些代码防护是否被认为是最佳实践?

例如,这会被视为最佳实践吗?

if log.isDebugEnabled()
     log.debug("trouble brewing...");

或者打电话

log.debug("I'll slow you down...");

已经为我们做这件事了吗?

最佳答案

如果为日志记录方法创建参数的成本很高,那么您应该首先调用保护方法。在您给出的示例中,没有任何意义,因为静态字符串没有性能成本,并且正如您正确推测的那样,日志记录框架在决定是否记录之前无论如何都会进行检查。

但请考虑以下因素;

logger.debug(myObject.someMethod());

在这种情况下,myObject.someMethod() 将在记录器接收其返回值之前被调用。如果该方法执行冗长的操作,那么无论是否启用记录器进行调试,您都将遭受性能损失。在这种情况下,您需要在进行该调用之前使用isDebugEnabled()

关于java - 没有调试日志代码保护的 apache.commons.logging.log 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55875016/

相关文章:

java - 用android的字符串计算

java - run() 方法未使用 start() 执行

java - 如何从 64 位 Java 连接到 Access .mdb 数据库?

java - 在 JPanel 上添加 .GIF 时显示黑色方 block

java - Logger.setLevel() 无法正确启用日志记录

java - Hibernate HQL否定 'is'语句的正确语法是什么

logging - log4j.xml 文件放置

java - log4j 可以配置为使用 Joda Time 的时区数据库吗?

一个应用程序中的 java.util.logging.Logger 和 org.apache.log4j.Logger - 第一个会记录为 log4j 吗?

java - 需要帮助在 Windows(Java、NetBeans)上的 Tomcat 中为 log4j 运行定制的 glass/jar