我在使用log4j的Windows服务器环境中运行Websphere上的应用程序。系统正在记录并且似乎遵守log4j.properties中定义的MaxFileSize限制(20KB - 见下文),但不会滚动日志文件。相反,它只是覆盖现有的日志文件。
这是我在Websphere中定义的log4j.properties文件:
log4j.rootLogger=debug, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=F:\\<log_file_directory\\<log_file_name>.log
log4j.appender.file.MaxFileSize=20KB
log4j.appender.file.MaxBackupIndex=50
log4j.appender.file.Append=true
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
我的理论是,当log4j尝试滚动文件时,应用程序/ JVM将继续引用日志文件,并且Windows正在查看正在使用的文件并阻止其被移动。但我肯定不知道这一点。
任何人都知道为什么日志文件不会滚动?或者我的理论可以正确吗?
答案 0 :(得分:3)
我的问题的解决方案是将log4j设置为WebSphere中的共享jar文件。每个应用程序都有一个对log4j开放的文件描述符,防止日志在点击MaxFileSize
时滚动。
一旦我将log4j设置为共享jar并弹回服务器,日志就会按预期滚动。我使用MaxFileSize
的多个尺寸对此进行了测试,并且都按预期工作。