log4j2 - Log4j2 翻转时间戳错误的文件
问题描述
我正在使用 log4j2 - org.apache.logging.log4j-log4j-api-2.14.1.jar
对于清理策略,我使用的是 CronbasedTriggerPolicy,在添加基于 cron 的触发策略后,每当 log4j2 翻转文件时,它都会用 0 替换日期和时间戳
这就是我的配置的样子
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<RollingFile fileName="data/appname-${date:yyyy-MM-dd_HH:mm:ss:SSS}.gz" filePattern="data/appname-%d{yyyy-MM-dd_HH:mm:ss.SSS}.%03i.gz" name="AppAppender">
<PatternLayout>
<pattern>%-6p %d{yyyy-MM-dd HH:mm:ss.SSS} %c{1}: %m%n
</pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="10MB"/>
<CronTriggeringPolicy schedule="*/5 * * * *"/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="data/" maxDepth="2">
<IfFileName glob="*appname-*.gz"/>
<IfLastModified age="1d"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger additivity="false" name="com.app.Test">
<AppenderRef ref="AppAppender"/>
</Logger>
</Loggers>
</Configuration>
当日志被写入文件时,文件看起来像这样 -
appname-2021-10-28_16:35:01:393.gz
在将文件更改滚动到此之后-
appname-2021-10-28_00:00:00.000.001.gz
为什么 log4j2 将时间戳更改为全 0?这在我添加 cron 触发策略后开始发生,如果我删除它,事情会按预期工作。我的最终议程是让 log4j2 删除所有超过 2 周的文件。我现在只是在玩配置一天。
解决方案
虽然,我仍然不清楚为什么cron触发器会将时间戳更改为全0,但我实现了我想要实现的目标,我对删除标签的理解还不够清楚。我通读了 log4j2 文档,我意识到我错过了他们解释每当翻转发生时删除工作的部分,出于我的需要,我意识到首先不需要有 cron 触发策略。每次 log4j2 翻转文件时,删除都会尝试运行。
推荐阅读
- node.js - Mongoose findOneAndUpdate 不会更新多个嵌套字段
- java - 如何动态地继续从 EditText 字段添加项目?
- function - 如何在 F# 中使用带有两个参数的函数,它们是二维整数数组
- php - 数组合并函数与重复值(保留键)
- mysql - 连接字符串中的字符编码是否设置值的存储方式?
- .net - 代码未在选项卡控件中的另一个选项卡上执行
- go - chan bool 如何让 goroutine 等待?
- windows - DCDIAG 在 PowerShell 中返回不同的输出
- sql-server - 如果 sql 在一台服务器中并且文件在另一台服务器中,如何通过 SQL 服务器运行 PowerShell 批处理文件或 command.ps1 文件
- file-io - 对于 julia 中的文件 io,哪个更快 read()、readline() 或 readlines()?