我有以下 log4j2.xml 配置。我有一个基于时间和大小的触发策略。由于首先违反了大小限制 (10 MB),因此日志文件会滚动并在创建新文件时将错误的日期附加到文件名。我想要的是:
文件名应为 abc.log、abc__2021-04-09__1.log、abc__2021-04-09__2.log。基本上它应该附加当前日期。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<RollingFile name="RollingFileAppender" fileName="/var/log/abc/abc.log"
filePattern="/var/log/abc/abc__%d{yyyy-MM-dd}__%i.log" immediateFlush="false" append="true">
<JsonLayout complete="true" compact="true" eventEol="true">
<KeyValuePair key="timestamp" value="$${date:yyyy-MM-dd'T'HH:mm:ss.SSSZ}"/>
</JsonLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="15"/>
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
<DefaultRolloverStrategy max="1500"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info" includeLocation="false">
<AppenderRef ref="RollingFileAppender"/>
</Root>
</Loggers>
</Configuration>
请让我知道我的代码哪里错了。提前致谢。
新编辑
要求 - 1) 或 2) 中较早发生的:
如果 1) 发生早于 2),它应该按照日志记录的速度一一刷新文件的现有内容,并写入文件名中附加当前日期的文件(不是服务启动的日期) .
如果 2) 发生在 1) 之前,它应该删除所有现有文件并开始写入文件名中附加当前日期(不是服务启动日期)的文件。
请帮助正确配置。
答案 0 :(得分:0)
您可以使用 cron 每 15 天滚动一次
<CronTriggeringPolicy schedule="30 15 */15 * * "/>
答案 1 :(得分:0)
RollingFileAppender 使用文件模式中的日期模式来确定翻转的频率。由于粒度是 1 天,这通常表示它应该每天滚动。然后您添加了 interval=15,因此已指示它每 15 天翻转一次。滚动文件的日期将始终是最后一次基于时间的滚动日期。当您添加基于大小的触发策略时,您表示在该时间窗口内可以有进一步的翻转。您应该将文件视为一个基于时间的翻转,它会被基于大小的翻转周期性地中断,因此所有这些都是增加索引上的计数器。
max 参数表示您希望在 15 天内允许 1500 个文件,而不是总共 1500 个文件的限制。
如果您希望文件名中的日期每天都改变,那么您需要使用 1 的间隔。
如果您想将总文件数限制为 1500,那么您需要将删除操作添加到您的翻转策略中。