log4j2滚动文件附加程序中的文件名出现问题



我有以下log4j2.xml配置。我有一个基于时间和大小的触发策略。由于首先违反了大小限制(10MB(,日志文件会滚动,在创建新文件时,会在文件名中添加错误的日期。我想要的是:

  • 当文件大小达到10 MB时进行回滚(所有文件的总大小不应超过10 MB的1500倍(
  • 每15天翻车一次

文件名应为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. 当所有文件的总大小超过1500倍10 MB~15 GB时(文件大小为10 MB(
  2. 自服务开始起每15天

如果1(发生在2(之前,它应该根据日志记录的速度逐个刷新文件的现有内容,并写入文件名后附加当前日期的文件(而不是服务启动的日期(。

如果2(发生在1(之前,它应该删除所有现有文件,并开始写入文件名后附加当前日期的文件(而不是服务启动的日期(。

请帮助进行正确的配置。

您可以使用cron每15天滚动一次

<CronTriggeringPolicy schedule="30 15 */15 * * "/> 
RollingFileAppender使用文件模式中的日期模式来确定滚动的频率。由于粒度是1天,这通常表示它应该每天滚动。然后您添加了interval=15,因此将其设置为每15天滚动一次。滚动文件的日期将始终是上次基于时间的滚动的日期。当您添加基于大小的触发策略时,您表示在该时间窗口内可以进行进一步的回滚。您应该将文件视为一个基于时间的滚动,它会被基于大小的滚动周期性地中断,所以所有这些操作都是增加索引上的计数器。

max参数表示您希望在15天窗口内允许1500个文件,而不是总共1500个文件的限制。

如果希望文件名中的日期每天都更改,则需要使用1的间隔。

如果要将文件总数限制为1500,则需要在滚动策略中添加"删除"操作。

最新更新