I'm using Log4j2 ver 2.3
log4j2.xml looks like:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<RollingFile name="RollingFile"
fileName="${sys:catalina.base}/logs/catalina.${date:yyyy-MM-dd}.log"
filePattern="${sys:catalina.base}/logs/catalina.%d{yyyy-MM-dd}.log">
<PatternLayout pattern="[TID=%X{TId}] %d{MMM dd, yyyy HH:mm:ss,SSS} %c %M:%L %p: %m%n"/>
<TimeBasedTriggeringPolicy modulate="true" />
</RollingFile>
</Appenders>
<Loggers>
<Root level="DEBUG" >
<AppenderRef ref="RollingFile" />
</Root>
</Loggers>
</Configuration>
All works fine until next day when log from a previous day is getting overwritten by some logs from current day.
Example: catalina.2018-03-21.log yesterday (March 21st) was fine but today got overwritten by some logs from 2018-03-22 when catalina.2018-03-22.log contains rest of logs from today (March 22nd)
Any thoughts?
Log4j 2.3 is somewhat old, being released on 2015-05-09, almost 3 years old. So try using a updated version; version 2.11.0 is the latest as of now which was released on 2018-03-11.
Update: To continue using Log4j 2.3, you can compromise your requirements. One of the options could be using static value for fileName
attribute. E.g. .../catalina.log
, .../catalina.current.log
, etc.
try
BasicConfigurator.resetConfiguration()
in the method that uses logger after BasicConfigurator.configure()
Try adding an auto-increment variable to your file pattern (%i). This worked fine for me.
filePattern="${sys:catalina.base}/logs/catalina.%d{yyyy-MM-dd}.%i.log"
mention in time based TimeBasedTriggeringPolicy time interval as 1 it will rollover file on daylly basis
来源:https://stackoverflow.com/questions/49432150/log4j2-overwrites-past-day-log-file