Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java log4j2滚动文件追加器中的文件名问题_Java_Xml_Log4j2_Appender_Rollingfileappender - Fatal编程技术网

Java log4j2滚动文件追加器中的文件名问题

Java log4j2滚动文件追加器中的文件名问题,java,xml,log4j2,appender,rollingfileappender,Java,Xml,Log4j2,Appender,Rollingfileappender,我有以下log4j2.xml配置。我有一个基于时间和大小的触发策略。由于首先违反了大小限制(10 MB),日志文件会滚动,并且在创建新文件时,会在文件名后附加错误的日期。我想要的是: 当文件大小达到10 MB时滚动(所有文件的总大小不应超过1500乘以10 MB) 每15天翻滚一次 文件名应为abc.log、abc__2021-04-09__1.log、abc__2021-04-09_2.log。基本上,它应该附加当前日期 <?xml version="1.0" e

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

  • 当文件大小达到10 MB时滚动(所有文件的总大小不应超过1500乘以10 MB)
  • 每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>


请让我知道我的代码哪里错了。提前感谢。

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

<CronTriggeringPolicy schedule="30 15 */15 * * "/> 

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

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

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


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

在未来15天的FileName日期后附加什么日期…我认为这与interval=15有关。是的,删除interval,将当前日期附加到文件名,但如何确保每15天滚动一次文件?您能解释一下吗?这样,我就不需要基于时间的触发策略了?此外,CronTriggeringPolicy是否可以与SizeBasedTriggeringPolicy共存?使用此cron触发器,您不需要基于时间的触发器。它可以与基于大小的触发器策略共存。“schedule=”30 15*/15**“/”的作用是什么?唯一的区别是TimeBsaedTriggeringPolicy检查是否在记录事件时进行滚动。当时间到期时,它滚动。CronTriggeringPolicy使用Log4j的内置调度程序在指定的时间发生翻滚事件,而不管是否记录了任何事件。简而言之,切换策略不会解决您面临的问题。当您通常在系统运行缓慢且不需要mcuh日志记录来触发翻滚时,使用CronTriggeringPolicy可以更好地进行翻滚。搜索Cron表达式以了解语法。