Log4j 日志会降低应用程序性能?

2022-09-04 20:57:53

日志记录是否会降低应用程序性能?以及如何限制在日志文件中打印显示标记日志?

例如。我的日志文件有以下日志

[2012-06-20 15:52:06,290] org.displaytag.tags.TableTag isFirstIteration 684 - [data] first iteration=true (row number=1)
[2012-06-20 15:52:06,290] org.displaytag.tags.TableTag isFirstIteration 684 - [data] first iteration=true (row number=1)
[2012-06-20 15:52:06,290] org.displaytag.tags.TableTag isFirstIteration 684 - [data] first iteration=true (row number=1)
[2012-06-20 15:52:06,290] org.displaytag.tags.TableTag isFirstIteration 684 - [data] first iteration=true (row number=1)

为什么以上内容在日志文件中?

log.properties 文件

# Log4j configuration file.
 log4j.rootCategory=DEBUG, A1
 # Available levels are DEBUG, INFO, WARN, ERROR, FATAL

 #
 # A1 is a ConsoleAppender 
 #

log4j.appender.A1 = org.apache.log4j.RollingFileAppender
log4j.appender.A1.File = C:/LogInfo/logfile.log
log4j.appender.A1.MaxFileSize = 100MB
log4j.appender.A1.MaxBackupIndex=50
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
log4j.appender.A1.append = true
log4j.appender.A1.layout.ConversionPattern = [%d] %C %M %L - %m%n
log4j.appender.A1.Threshold = DEBUG

如何停止 (org.displaytag.tags.TableTag) 这些类型的日志打印在日志文件中


答案 1

日志记录是否会降低应用程序性能?

是的。它的作用取决于许多因素;见下文。

以及如何限制在日志文件中打印显示标记日志?

通过更改日志记录属性中的转换模式

为什么以上内容在日志文件中?

因为:

  1. 代码中的某个地方是对 Logger 方法(可能 )的调用,其中包含该消息,并且debug(String)
  2. 日志记录属性将追加器的日志记录阈值设置为 DEBUG。

要提高性能:

  1. 将转换模式更改为使用较便宜的日期/时间格式,并且(更重要的是)避免使用“C”,“F”,“L”和“M”,因为它们特别昂贵。
  2. 将日志记录阈值更改为 INFO 或 WARNING 或 ERROR 以减少日志记录量,
  3. 将调用放在检查调试日志记录是否已启用的语句中。这节省了在不需要的情况下组装日志消息的成本;请参阅在 log4j 中,在日志记录之前检查是否已定义已启用以提高性能?Logger.debug(...)if
  4. 对于 log4j 版本 2 (log4j2),日志记录方法中存在采用格式和参数的重载。这些可减少禁用级别的日志记录时的开销。
  5. 另请查看 logback 和 log4j 2.0。

您还可以在以下级别限制日志记录...如 log4j 文档中所述。实际上,该文档回答了您提出的大多数问题,并且提供了有关日志记录性能和日志记录配置主题的大量详细信息。Logger


答案 2

简短的回答:是的,它会降低应用程序性能,因为它会使用一些CPU周期和其他资源(内存等)。

另请参阅此问题:log4j 性能


推荐