Log4j日志轮转异常求助:配置后日志未按预期轮转
解决Log4j日志未按预期轮转的问题
嗨,兄弟,你的问题一眼就能看出来——你的配置只完成了「日志记录器关联输出目标」这一步,但完全没定义这些输出目标(也就是Appender)的具体行为,尤其是负责日志轮转的关键配置!
你贴的配置里只指定了Logger要输出到aud0、stdout、fileout,但根本没告诉Log4j:这些Appender是什么类型?是普通文件还是轮转文件?轮转的触发条件是什么?
给你补全完整的可轮转日志配置示例(针对Log4j 1.x,因为你用的是.properties格式)
# 禁用根日志记录器 log4j.rootLogger= # -------------------------- 定义轮转文件Appender -------------------------- # 按大小+保留备份数轮转的RollingFileAppender log4j.appender.fileout=org.apache.log4j.RollingFileAppender # 日志文件路径(注意替换成你的实际路径) log4j.appender.fileout.File=/var/log/myapp/service.log # 单个日志文件最大大小,比如10MB log4j.appender.fileout.MaxFileSize=10MB # 最多保留的备份日志数量 log4j.appender.fileout.MaxBackupIndex=10 # 日志格式(按需调整) log4j.appender.fileout.layout=org.apache.log4j.PatternLayout log4j.appender.fileout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # 如果需要按日期轮转(比如每天生成新日志),可以用DailyRollingFileAppender # log4j.appender.fileout=org.apache.log4j.DailyRollingFileAppender # log4j.appender.fileout.File=/var/log/myapp/service.log # 日期格式(每天凌晨轮转) # log4j.appender.fileout.DatePattern='.'yyyy-MM-dd # log4j.appender.fileout.layout=org.apache.log4j.PatternLayout # log4j.appender.fileout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # -------------------------- 定义控制台Appender -------------------------- log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # -------------------------- 定义你的业务Logger -------------------------- log4j.category.com.company.basesvc.common.server.log.SafeLog=aud0, stdout, fileout log4j.category.com.company.basesvc.javascript.core.JavascriptLog=aud0, stdout, fileout log4j.category.org.snmp4j.log.Log=error, stdout, fileout # log4j.category.com.company.cwmp=off, stdout, fileout
关键注意事项
- Appender名称要匹配:你Logger里写的
fileout必须和定义的log4j.appender.fileout名称完全一致,大小写敏感! - 日志目录权限:确保应用进程有日志目录的读写权限,否则轮转时会失败(可能连日志都写不了)。
- 选择合适的轮转策略:
RollingFileAppender适合按文件大小轮转,DailyRollingFileAppender适合按日期轮转,根据你的需求二选一。 - 检查Log4j版本:如果是Log4j 2.x,配置格式会有差异,但你用的是
.properties,大概率是1.x版本,上面的配置适用。
把这些配置补进去,重启应用后应该就能看到日志正常轮转了!
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

