【问题标题】:Will log4j.rootLogger=DEBUG with no appender on that level impact in performance?没有附加器的 log4j.rootLogger=DEBUG 会影响性能吗?
【发布时间】:2021-07-08 20:21:18
【问题描述】:

让我们想象一个场景 A,其中我有 log4j.rootLogger=DEBUG 和一个具有相同日志记录级别的文件附加程序:

log4j.rootLogger=DEBUG, default.out, default.file 

log4j.appender.default.file=org.apache.log4j.RollingFileAppender
log4j.appender.default.file.append=true
log4j.appender.default.file.file=log/error.log
log4j.appender.default.file.threshold=DEBUG
log4j.appender.default.file.MaxFileSize=10240KB
log4j.appender.default.file.MaxBackupIndex=100
log4j.appender.default.file.layout=org.apache.log4j.PatternLayout
log4j.appender.default.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

现在我们将与场景 B 进行比较:

log4j.rootLogger=INFO, default.out, default.file 

log4j.appender.default.file=org.apache.log4j.RollingFileAppender
log4j.appender.default.file.append=true
log4j.appender.default.file.file=log/error.log
log4j.appender.default.file.threshold=INFO
log4j.appender.default.file.MaxFileSize=10240KB
log4j.appender.default.file.MaxBackupIndex=100
log4j.appender.default.file.layout=org.apache.log4j.PatternLayout
log4j.appender.default.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

我知道场景 A 会比 B 更冗长,影响我的软件性能的日志。但是现在,让我们与另一个场景 C 进行比较,其中我将 rootLogger 放入 DEBUG,但将 appender 放入 INFO:

log4j.rootLogger=DEBUG, default.out, default.file 

log4j.appender.default.file=org.apache.log4j.RollingFileAppender
log4j.appender.default.file.append=true
log4j.appender.default.file.file=log/error.log
log4j.appender.default.file.threshold=INFO
log4j.appender.default.file.MaxFileSize=10240KB
log4j.appender.default.file.MaxBackupIndex=100
log4j.appender.default.file.layout=org.apache.log4j.PatternLayout
log4j.appender.default.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

我的log4j创建的文件不会写入大量来自DEBUG logger的信息,因为我设置了log4j.appender.default.file.threshold=INFO,所以只会写入INFO。但是我的 rootLogger 设置在 DEBUG 上怎么样?

log4j.rootLogger=DEBUG 会影响性能吗?场景 B 会比场景 C 更有效吗?

【问题讨论】:

    标签: java logging log4j


    【解决方案1】:

    场景 B 会比场景 C 好一点。

    最慢的地方是 appender 将日志写入文件。在这两种情况下,这种影响是相同的。
    但是,即使没有任何附加程序,记录器的执行也会减慢,因为当记录器通过当前消息的日志级别时,您需要为每个日志消息执行代码以检查当前附加程序。这在场景 C 中会更频繁地发生。

    此外,在某些代码中,通过首先检查日志级别来保护昂贵日志消息的创建。在场景 C 中,这段代码仍然被执行,而在场景 B 中,它被跳过并且执行速度更快,例如:

    if(logger.isEnabledFor(Level.DEBUG)) {
        logger.debug("message: " + object.expensiveToString())
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-07
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 2021-04-29
      • 2012-02-04
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多