Logback RollingFileAppender随机写入历史日志文件问题求助
Logback偶发写入随机历史日志文件问题排查建议
配置信息
当前使用的Logback配置如下:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${user.dir}/servers/${weblogic.Name}/logs/XYX.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${user.dir}/servers/${weblogic.Name}/logs/XYX.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>%date %-3.-3level %replace(%replace(%-28.-28thread){'ExecuteThread: ','th='}){'ACTIVE','A'} | [%X{facadeType} - %X{processId}] | %logger{10} [%file:%line] --> %msg%n</pattern> </encoder> </appender> <root> <level value="INFO"/> <appender-ref ref="FILE"/> </root>
问题现象
配置语法无误,多数场景运行正常,但偶发出现Logback写入随机历史日志文件的情况。例如2023年8月23日11:03起,系统开始写入8月10日创建的日志文件,直至16:04才恢复写入当日正确文件;异常持续时间不定,发作无规律。
已完成排查
- 查阅Logback发布说明,未发现相关Bug修复或更新记录;
- 检查配置语法,未发现错误;
- 更新服务器内核、设备映射等应用相关版本,无改善;
- 排查发作事件间的关联因素,未找到规律;
- 检查异常日志文件末尾内容,无关联线索;
- 查看cron/crontab日志,无错误记录。
进一步排查与修复建议
确认Logback与WebLogic版本兼容性
部分WebLogic版本与特定Logback版本存在类加载或逻辑冲突,建议尝试升级Logback至最新稳定版(如1.2.x系列),或降级到与WebLogic官方兼容的版本后测试。添加明确的文件锁定策略
在RollingFileAppender中添加文件锁定配置,避免多线程/多节点场景下文件句柄异常:<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 原有配置 --> <lockingPolicy class="ch.qos.logback.core.FileAppender$FallbackLockingPolicy"/> </appender>若为单节点环境,也可尝试
NOPLockingPolicy来简化锁逻辑,排除锁机制导致的异常。开启Logback内部调试日志
启用Logback自身的调试模式,追踪文件轮转的详细过程,定位异常发生时的逻辑走向:<configuration debug="true"> <!-- 原有所有配置 --> <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/> </configuration>调试日志会输出文件名生成、文件切换的具体步骤,可从中发现异常路径的生成原因。
检查文件系统与权限稳定性
若日志目录位于NFS或其他网络挂载文件系统上,可能存在文件系统延迟或inode异常。异常时段可检查:- 日志目录的文件权限是否正常;
- 文件系统的inode使用情况;
- 应用进程对日志文件的读写权限是否波动。
固定日志路径排除变量异常
临时将配置中的${weblogic.Name}和${user.dir}替换为固定路径,测试是否由变量值偶发变更导致路径错误,进而写入历史文件。排查进程资源瓶颈
异常时段检查应用进程的CPU、内存、文件句柄使用情况:- 若进程出现内存溢出或文件句柄耗尽,可能导致Logback的文件轮转逻辑执行异常;
- 查看系统日志中是否有进程卡顿、OOM等相关记录。
内容的提问来源于stack exchange,提问作者Erik
相关产品推荐
相关产品推荐

