Java 默认log4j策略
我试图理解Java 默认log4j策略,java,spring,logging,log4j,slf4j,Java,Spring,Logging,Log4j,Slf4j,我试图理解TimeBasedTriggeringPolicy如何确定何时创建/追加/删除日志文件 对于以下配置: <RollingRandomAccessFile name="test" fileName="/logs/test.log" filePattern="/logs/test.log.%d{yyyy-MM-dd}" <Policies> <TimeBasedTriggeringPolicy />
TimeBasedTriggeringPolicy
如何确定何时创建/追加/删除日志文件
对于以下配置:
<RollingRandomAccessFile name="test" fileName="/logs/test.log" filePattern="/logs/test.log.%d{yyyy-MM-dd}"
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingRandomAccessFile>
?
我试图理解基于时间的触发策略是如何决定何时启动的
创建/附加/删除日志文件
TimeBasedTriggeringPolicy
控制下一次滚动发生的时间。下一次滚动时间根据提供的日期单位确定<代码>{yyyy-MM-dd}表示是第二天。在没有其他触发策略的情况下,所有日志都会附加到当前文件中
DefaultRolloverStrategy
控制何时根据文件模式归档/删除/创建日志文件。当第二天到来时,将创建具有当前日期的新文件,并将所有日志附加到新文件中。根据滚动策略配置,可以保留或删除前一天的文件max
和min
属性控制文件模式中带有%i
说明符的文件数量,以维护文件计数器,并控制文件重命名
原创
%d参数表示新的日志文件test.log附加了
是否每天都创建当前{yyyy-MM-dd}?以前版本的
是否未删除test.log?如果我将%d更改为%M,是否应创建新文件
每个月创建一次
%d
是转换说明符-Log4j 2具有用于不同转换说明符的转换器<代码>%d指日期,允许您发送日期格式。日期时间单位本身控制何时发生滚动<代码>%m在log4j2中不可识别,您将使用%d{yyyy-MM}
每月创建一个文件。您可以使用modulate
标志在间隔边界-月初滚动文件
为了确保仅当前日志文件可用且
如果策略修改为:
<RollingRandomAccessFile name="test" fileName="/logs/test.log" filePattern="/logs/test.log.%d{yyyy-MM-dd}"
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
</RollingRandomAccessFile>
/RollingHandomAccessFile>
是的,没错interval=“1”
是默认值,因此可以删除<代码>默认滚动策略在未指定任何滚动策略时应用。默认的滚动策略将使用提供的文件名模式进行滚动。由于这是每天的(-dd
),它将每天滚动文件,而在同一天没有中间文件
从-
RollingLandMacAccessFileAppender需要触发策略和
滚动策略。触发策略确定是否发生滚动
应在RolloverStrategy定义
应该进行滚动。如果未配置RolloverStrategy,
RollingLandMacAccessFileAppender将使用默认RollorOverstrategy
您可以使用适当的触发策略和滚动策略进行进一步自定义。除其他外,在配置时,您需要为
文件模式
参数提供一个值
此配置参数将指示生成的归档日志文件的文件名模式
此模式的格式取决于RollingFileAppender
使用的RolloverPolicy
默认情况下,Log4j 2将使用
此策略将允许您通过指示%i
模式标记,或通过日期/时间,以及在您的用例中指示%d
模式标记,基于数字索引滚动日志。您还可以将数字索引添加到日期/时间模式中:在这种情况下,数字索引将递增,直到日期/时间模式的结果发生更改
如果定义了日期/时间模式,则需要通过在示例中传递兼容模式yyyy-MM-dd
来提供执行滚动的基本粒度
我说的是基本粒度,而不仅仅是粒度,因为实际的日志滚动时刻将取决于如何配置与RollingFileAppender
关联的触发器策略
在的情况下,您可以配置几个参数来确定日志滚动行为,主要有两个
首先,您有interval
参数:它将根据日期模式中最具体的时间单位指示滚动发生的频率。i、 e.如您的示例所示,如果您将天配置为最具体的单位,并为间隔
参数提供3
(默认为1
)的值,则滚动将每隔3
天发生一次
其次,您可以激活modulate
参数(默认为false
)。此参数指示是否应调整间隔以使下一次滚动发生在间隔边界上。Log4j2文档提供了一个清晰的示例:
例如,如果项目为小时,当前小时为凌晨3点,间隔为4点,则第一次滚动将在凌晨4点发生,然后下一次滚动将在上午8点、中午、下午4点等发生
在您的用例中也会出现类似的情况,但语义为“一年中的某一天”
有关详细信息,请参见PatternProcessor
类的。同时也要注意这个问题
关于日志删除,据我所知,如果您在模式中使用数字索引(通过调整fileIndex
,min
endmax
参数),默认的滚动策略只会删除旧文件,但是,由于Log4j 2.5,当日志滚动发生时,可以使用来执行基于日期/时间的日志的清理(在Log4j中,将in-actions视为一种钩子)
例如,如果您只需要将日志文件保留30天,则可以使用以下内容配置此功能:
请务必注意,删除过程可能会影响任何文件,而不仅仅是日志文件:请确保