现在我有一个java程序使用log4j2管理日志,我在log4j2.xml中配置日志文件的名称根据日志动态生成。现在的问题是日志文件和文件夹的名称正确,但是日志压缩文件名称中的日期区却是错误的。
情况如下图:
文件夹名称[2020-07-13]是正确的,而压缩文件名称中的日期却是[2020-05-11]。
<!-- 常规日志 -->
<RollingFile name="rollingFile_info"
fileName="${LOG_HOME}/info.log"
filePattern="${LOG_HOME}/${date:yyyy-MM-dd}/info-%d{yyyy-MM-dd}-%i.log.gz">
<!-- 输出级别 -->
<Filters>
<!-- 限制日志级别在info及以上在error以下 -->
<!-- error级别以下 -->
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<!-- info级别以上 -->
<ThresholdFilter level="info" onMatch="accept" onMismatch="deny"/>
</Filters>
<!-- 输出格式 -->
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
<!-- 封存策略 -->
<Policies>
<!-- 文件大小 超出后自动封存 -->
<SizeBasedTriggeringPolicy size="5MB"/>
<!-- 时间间隔 -->
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
</Policies>
</RollingFile>
这一句的filePattern="${LOG_HOME}/${date:yyyy-MM-dd}/info-%d{yyyy-MM-dd}-%i.log.gz">
${date:yyyy-MM-dd}
%d{yyyy-MM-dd}
区别在哪里?你仔细看一下。
而且日期相差近俩月,可以排除时区的问题。执行环境都是本地吗
配置文件是从网上找到的播客中复制过来的,${date:yyyy-MM-dd}和%d{yyyy-MM-dd}我不太了解,刚刚在网上也没找到相关说明。不过我测试了一下,如果使用${date}替代%d{}那么程序将无法运行。
应该和执行环境无关,我在自己的电脑和同事的电脑都测试了一下,都存在相同的问题。
确实好奇怪,今天15号,这个错误的日期也会变成5-13吗?
终极大法,debug一下吧。
并不会,错误日志还是5月11号。这个程序已经运行了一段时间,在检查错误时才发现最近一段时间的日志压缩文件命名都是5月11号。