asm*_*ier 53 java logging log4j
我有几个log4j用于日志记录的Java应用程序的日志记录问题:
我想每天轮换日志文件,比如
log.2010-09-10
log.2010-09-09
log.2010-09-08
log.2010-09-07
log.2010-09-06
log.2010-09-05
log.2010-09-04
Run Code Online (Sandbox Code Playgroud)
但出于数据安全原因,我们不允许在我的公司保留超过七天的日志文件.因此,下一个下一个日志文件的生成log.2010-09-11应该触发删除log.2010-09-04.是否可以配置这样的行为log4j?如果没有,你知道另一种优雅的解决方案吗?
dty*_*dty 56
我假设您正在使用RollingFileAppender?在这种情况下,它有一个属性MaxBackupIndex,您可以设置为限制文件数.例如:
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=7
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
Run Code Online (Sandbox Code Playgroud)
dog*_*ane 27
您可以在单独的脚本中执行您的内务管理,该脚本可以每天运行.像这样的东西:
find /path/to/logs -type f -mtime +7 -exec rm -f {} \;
Run Code Online (Sandbox Code Playgroud)
Phi*_*Din 15
根据以下帖子,你不能用log4j做到这一点:在DailyRollingFileAppender -log4j中使用MaxBackupIndex
据我所知,这个功能应该被用于log4j 2.0,但是这种努力得到了改进.根据logback网站,logback是log4j的预期继承者,因此您可以考虑使用它.
有一个名为SLF4J的API,它为日志记录提供了一个通用的API.它将在运行时加载实际的日志记录实现,因此根据您提供的配置,它可能使用java.util.log或log4j或logback或任何其他能够提供日志记录功能的库.从使用log4j直接使用SLF4J会有一些前期工作,但它们提供了一些工具来自动化这个过程.将代码转换为使用SLF4J后,切换日志后端应该只是更改配置文件的情况.
log2j现在支持删除旧日志.查看DefaultRolloverStrategy标记,并在下面的代码段中查看.它在同一天创建最多10个档案,将解析您在Properties标签下定义的$ {baseDir}目录,最大深度为2,日志文件名与"app - *.log.gz"匹配,并删除早于7的日志如果您最近的5个日志超过7天,则保留最近的5个日志.
<DefaultRolloverStrategy max="10">
<Delete basePath="${baseDir}" maxDepth="2">
<IfFileName glob="*/app-*.log.gz">
<IfLastModified age="7d">
<IfAny>
<IfAccumulatedFileCount exceeds="5" />
</IfAny>
</IfLastModified>
</IfFileName>
</Delete>
</DefaultRolloverStrategy>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
142410 次 |
| 最近记录: |