日志记录会降低应用程序性能吗? 以及如何限制在日志文件中打印显示标签日志?
例如。我的日志文件有以下日志
[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)这些日志打印在日志文件中
答案 0 :(得分:7)
日志记录会降低应用程序性能吗?
是。它的作用取决于许多因素;见下文。
以及如何限制在日志文件中打印显示标签日志?
通过更改日志记录属性中的ConversionPattern
为什么以上是在日志文件中?
由于:
debug(String)
),提高绩效:
将Logger.debug(...)
调用放在if
语句中,该语句检查启用了调试日志记录。这样可以节省在不需要的情况下组装日志消息的成本;见In log4j, does checking isDebugEnabled before logging improve performance?。
UPDATE - 对于log4j版本2,采用格式和参数的日志记录方法存在重载。这些可以减少在禁用级别的日志记录时的开销。
您还可以在记录器级别限制日志记录...如log4j documentation中所述。事实上,该文档回答了您提出的大多数问题,并且在日志记录性能和日志记录配置方面有很多详细信息。
答案 1 :(得分:1)
简短回答:是的,它会降低应用程序性能,因为它会占用一些CPU周期和其他资源(内存等)。
另请参阅此问题:log4j performance
答案 2 :(得分:1)
记录可以是你cpu时间的30%或更多。就抖动而言,它与GC延迟一样大(且更经常)。
减少开销的一种简单方法是使用Pattern来关闭记录每条消息的位置。在你的情况下,这是%C%M和%L,因为必须采用堆栈跟踪(entier堆栈)来获取此信息。
答案 3 :(得分:0)
是的,他们这样做。这就是为什么你应该只记录错误或必须绝对记录的东西。您还可以在调试通道中记录有助于调试的信息,这样就不会影响生产性能。
答案 4 :(得分:0)
您可以像这样限制垃圾日志。 将根记录器设置为INFO,以便不会出现不必要的调试日志并填满您的日志文件。
log4j.rootCategory=INFO, A1
如果您希望特定的类或包发出DEBUG日志,您可以这样做。
log4j.logger.org.hibernate.event.def.DefaultLoadEventListener=DEBUG,A1
以上内容将打印日志文件中DefaultLoadEventListener类的DEBUG级别日志以及其他INFO级别日志。
答案 5 :(得分:0)
怎么样?
log4j.category.org.displaytag.tags.TableTag=ERROR, A1