Log rotation is not behaving as expected for a java service which has log4j version 2.13.3 integrated.
As per my understanding, service should keep writing to myservice.log. When config thresholds are met, the log file should get rotated, then gzipped and then the rotated file should get deleted.
But in this case, at times, the service process keeps writing to a rotated deleted file like myservice.log.5 along with writing to myservice.log. Writing to myservice.log.5 doesn't stop until service process is stopped, thereby leading to disk space issues.
$ sudo lsof / | grep deleted
java 19157 myuser 1w REG 254,1 4578098674 138749 /var/log/myservice/myservice.log.5 (deleted)
java 19157 myuser 2w REG 254,1 4578098674 138749 /var/log/myservice/myservice.log.5 (deleted)
Here 19157 is the pid of java service.
Content of log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="60" status="WARN">
<Properties>
<Property name="LOG_DIR">/var/log/myservice</Property>
<Property name="console.log.pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} "%X{X-Request-ID}" "%X{url}" %level %c{1.1} %t %msg%n</Property>
<Property name="info.log.pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} "%X{X-Request-ID}" "%X{url}" %level %t %c{1.1} %msg%n</Property>
<Property name="error.log.pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} "%X{X-Request-ID}" "%X{url}" %level %t %c{1.1} %msg%n%rEx</Property>
<Property name="default.size">100 MB</Property>
</Properties>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="${console.log.pattern}"/>
</Console>
<RollingRandomAccessFile
name="InfoLog"
fileName="${LOG_DIR}/myservice.log"
filePattern="${LOG_DIR}/myservice.log.%i.gz"
immediateFlush="false">
<PatternLayout pattern="${info.log.pattern}"/>
<Policies>
<SizeBasedTriggeringPolicy size="${default.size}"/>
</Policies>
<DefaultRolloverStrategy max="5"/>
</RollingRandomAccessFile>
<RollingRandomAccessFile
name="ErrorLog"
fileName="${LOG_DIR}/error.log"
filePattern="${LOG_DIR}/error.log.%i.gz"
immediateFlush="false">
<PatternLayout pattern="${error.log.pattern}"/>
<Policies>
<SizeBasedTriggeringPolicy size="${default.size}"/>
</Policies>
<DefaultRolloverStrategy max="5"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="InfoLog" level="INFO"/>
<AppenderRef ref="ErrorLog" level="ERROR"/>
</Root>
<Logger name="ConsoleLog" level="DEBUG" additivity="false">
<Appender-ref ref="STDOUT"/>
</Logger>
</Loggers>
</Configuration>
Can someone help with why service is still writing to deleted file myservice.log.5 and how to fix this?