我在试着理解 TimeBasedTriggeringPolicy
确定何时创建/附加/删除日志文件。
对于以下配置:
<RollingRandomAccessFile name="test" fileName="/logs/test.log" filePattern="/logs/test.log.%d{yyyy-MM-dd}"
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingRandomAccessFile>
是否正确:
这个 %d
参数表示附加了当前日志的新日志文件test.log {yyyy-MM-dd}
每天都在创建吗?是否不删除以前版本的test.log?如果我将%d更改为%m,是否应该每月创建一个新文件?
为了确保只有当天的日志文件可用,并删除其他日志文件,应将策略修改为:
<RollingRandomAccessFile name="test" fileName="/logs/test.log" filePattern="/logs/test.log.%d{yyyy-MM-dd}"
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
</RollingRandomAccessFile>
?
2条答案
按热度按时间af7jpaap1#
其中,当您配置
RollingFileAppender
您需要为filePattern
参数。此配置参数将指示生成的存档日志文件的文件名模式。
此模式的格式取决于
RolloverPolicy
由使用的RollingFileAppender
.默认情况下,log4j2将使用默认的滚动策略。
此策略将允许您通过指示
%i
模式标记或按日期/时间,通过指示%d
在您的用例中的模式标记。您还可以将数字索引添加到日期/时间模式:在这种情况下,数字索引将递增,直到日期/时间模式的结果发生更改。如果定义日期/时间模式,则需要通过传递
SimpleDateFormat
兼容模式,yyyy-MM-dd
在你的例子中。我说的是基本粒度,而不仅仅是粒度,因为实际的日志滚动时刻将取决于如何配置与
RollingFileAppender
.如果是
TimeBasedTriggeringPolicy
您可以配置几个参数来确定日志滚动行为,主要有两个。首先,你有
interval
参数:它将根据日期模式中最具体的时间单位指示滚动发生的频率。i、 例如,如果您将day配置为最具体的单位,并提供3
(是的1
默认情况下)interval
参数滚动将在每个3
天。第二,你可以激活(它是
false
默认情况下)modulate
参数。此参数指示是否应调整间隔以使下一次滚动发生在间隔边界上。log4j2文档提供了一个清晰的示例:例如,如果项目为小时,当前小时为凌晨3点,间隔为4,则第一次滚动将发生在凌晨4点,然后下一次滚动将发生在上午8点、中午、下午4点等。
类似的事情会发生在你的用例中,但是语义上是一年中的某一天。
请看源代码的
PatternProcessor
类以获取深入的信息。注意安全increment
方法也是。关于日志删除,据我所知,如果您在模式中使用数字索引(通过调整
fileIndex
,min
结束max
但是,由于log4j 2.5,当发生日志滚动时,可以使用delete操作来执行基于日期/时间的日志清理(在log4j中,将in-actions视为一种钩子)。例如,如果您只需要保存日志文件
30
您可以使用以下内容配置此功能:请注意,删除过程可能会影响任何文件,而不仅仅是日志文件,这一点非常重要:请确保参数化正确的执行路径,并提供正确的
glob
使用此功能时的模式。dbf7pr2w2#
我试图理解timebasedtriggeringpolicy如何确定何时创建/附加/删除日志文件。
TimeBasedTriggeringPolicy
控制下一次滚动发生的时间。下一次滚动时间根据提供的日期单位确定。{yyyy-MM-dd}
意味着是第二天。在没有其他触发策略的情况下,所有日志都会附加到当前日期文件中。DefaultRolloverStrategy
根据文件模式控制何时存档/删除/创建日志文件。第二天到达时,将创建当前日期的新文件,并将所有日志附加到新文件中。根据滚动策略配置,可以保留或删除前一天的文件。max
以及min
属性控制具有%i
文件模式中的说明符来维护文件计数器和fileIndex
控制文件重命名。起初的
%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{yyyyy-mm-dd}”时基触发策略间隔=“1”/>/rollingrandomaccessfile>?
是的,这是正确的。
interval="1"
是默认值,因此可以删除。DefaultRollOverStrategy
在未指定任何滚动策略时应用。默认的滚动策略将使用提供给滚动的文件名模式。因为这是每天的事(-dd
)它将每天滚动文件,同一天没有中间文件。来自文档-
rollingrandomaccessfileappender需要triggeringpolicy和rolloverstrategy。触发策略确定是否应该执行滚动更新,而滚动更新策略定义如何执行滚动更新。如果未配置rolloverstrategy,RollingAndomAccessFileAppender将使用defaultrolloverstrategy
您可以使用适当的触发策略和滚动策略进一步自定义。