多个spring boot实例输出logback日志到一个文件导致日志混乱问题

时间:2025-03-18 21:18:03

前段时间在排查问题的时候,发现日志好像是缺失了一部分,
缺失的一部分出现在了昨天的日志文件里面,
经过了解之后,得知我们的某服务ServiceA是以不同端口号
启动了两个实例,在同一台服务器上。

项目中日志配置文件指定文件输出路径的地方:

<property name="logpath" value="${LOG_PATH:-/opt/ServiceA/logs/}" />

这样两个实例会同时写入到logs目录下的同一个日志文件

这个时候就出现问题了,因为将要输出第二天日志的时候,
logback会将当天的日志文件修改成类似debug.这样的名字,
实例2去改名的时候,实例1已经霸占到了当天的日志文件,
实例1修改完成之后,新建了一个新的日志文件,
实例2没能完成修改,正常情况下这个文件只能实例2维护,
它可以认为也没有新建日志文件,所以就把日志输出在了之前的文件当中。

解决办法是在日志输出目录后加上端口号,让两个实例输出日志到不同的目录,
类似这样配置:

<property name="logpath" value="${LOG_PATH:-/opt/ServiceA/logs/{port}}" />

参考文章:

深寒色的猫丶多项目写入同一Logback日志文件导致的滚动混乱问题(修改Logback源码)