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

标签 java logging log4j

日志记录会降低应用程序性能吗? 以及如何限制在日志文件中打印 display-tags 日志?

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

[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)这些类型的日志打印在日志文件中

最佳答案

Does logging decreases application performance?

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

and how to restrict display-tags logs to be printed in log files?

通过更改日志记录属性中的 ConversionPattern

why the above is in log file?

因为:

  1. 代码中的某处是使用该消息调用 Logger 方法(可能是 debug(String)),并且
  2. 您的日志记录属性将附加程序的日志记录阈值设置为 DEBUG。

提高性能:

  1. 更改 ConversionPattern 以使用成本较低的日期/时间格式,并且(更重要的是)避免使用“C”、“F”、“L”和“M”,因为它们特别昂贵。
  2. 将日志记录阈值更改为 INFO 或 WARNING 或 ERROR 以减少日志记录量,
  3. Logger.debug(...) 调用放在 if 语句中,该语句检查调试日志是否已启用。这节省了在不需要日志消息的情况下组装日志消息的成本;见In log4j, does checking isDebugEnabled before logging improve performance? .
  4. 对于 log4j 版本 2 (log4j2),在采用格式和参数的日志记录方法上存在重载。当日志记录处于禁用级别时,这些减少了开销。
  5. 另请参阅 logback 和 log4j 2.0。

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

关于java - Log4j 日志会降低应用程序性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11117916/

相关文章:

java - 类型 '[io.rearealm.com_example_myapplication_UserRealmProxy]' 的未关闭文件;这些类型不会经过注释处理

java - Android Java 最小化时获取

java - SLF4J 相当于 Log4j 的 "-Dlog4j.debug"选项是什么?

java - Log4j:带有属性的配置回退错误处理程序

java - 使用 Java 客户端库连接到 YouTube Data API v3 时出现问题 - 示例代码已过时?

java - 为什么 JTextArea.append() 不显示任何内容?

Python 日志记录问题?

java - Log4j:具有特化的多个类别

c++ - 有没有办法用 Boost.Log 实现多个独立的日志系统?

java - Mybatis log4j如何配置log4j以将sql日志打印到文件