我有问题的log4j日志。我有一个应用程序,写了很多日志,这就是为什么当它跨越了文件大小的限制,它生成新的文件。我的log4j.properties
文件如下所示。如果我把MaxBackupIndex无限制,那么就没有问题。但如果我把一个限制和备份索引达到这个限制,那么日志系统变得疯狂。它开始写入不同的日志文件在同一时间,这使得不可能跟踪日志文件。
log4j.rootLogger=ALL,R,C
# Appender R
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=/file_location/app.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[%p]%d{DATE} %l - %m%n
log4j.appender.R.MaxFileSize=30720KB
log4j.appender.R.MaxBackupIndex=10
# Appender C
log4j.appender.C=org.apache.log4j.RollingFileAppender
log4j.appender.C.Threshold=error
log4j.appender.C.layout=org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern=[%p]%d{DATE} %l - %m%n
log4j.appender.C.File=/file_location/apps_err.log
例如:
I've app.log, app.log.1, app.log.2 ..... app.log.9. When It reaches the limit than it starts writing something like the following order:
app.log.7
app.log.2
app.log.9
etc etc....
它不遵循任何规则写入文件。现在暂时我所做的是增加了备份索引的限制。
任何人都有任何想法如何摆脱这种恼人的日志记录。有很多问题关于如何使多个日志文件,但我没有找到如何避免这种类型的多个写入。
先谢谢你。
3条答案
按热度按时间biswetbf1#
您有一个
RollingFileAppender
,而您的配置要求每当日志大小达到~ 30 MB(MaxFileSize=30720KB)
时,就拆分日志文件。另一个选项(MaxBackupIndex=10)
将最多保留10个文件的历史记录。此外,记录器示例是异步的,因此打印的日志将不同步。
tjvv9vkg2#
这些设置将执行您指定的操作。
以以下示例设置为例(出于演示目的,将日志文件大小减少到
1KB
)使用此代码段
将生成以下文件
一旦logifle
app.log
大于MaxFileSize
,它就被重命名为app.log.1
。之前存在的app.log.1
被重命名为app.log.2
,以此类推,直到达到MaxBackupIndex
的最大数量,然后最旧的文件被删除。如果您的目标是只拥有一个日志文件
app.log
,最大大小为MaxFileSize
,您可以将MaxBackupIndex
设置为零。但这有一个副作用。如果app.log
达到MaxFileSize
,它将被删除,并且下面的日志语句将进入一个新的空文件。将上述属性修改为
log4j.appender.R.MaxBackupIndex=0
,app.log
的大小将为没有一个内置的解决方案来保持一个日志文件不超过
MaxFileSize
。因为这意味着一旦达到MaxFileSize
,您需要从文件的开头删除最旧的日志条目。一个可能的解决方案是将
MaxBackupIndex
设置为1,这样您最终只得到app.log
和app.log.1
。bfhwhh0e3#
而不是
RollingFileAppender
使用DailyRollingFileAppender
。DailyRollingFileAppender
每天只写2个日志文件(上午和下午)。也许这将解决你的问题。如果你想要任何其他细节,让我知道。。将解释