默认log4j策略

bt1cpqcv  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(558)

我在试着理解 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>

?

af7jpaap

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 您可以使用以下内容配置此功能:

<RollingRandomAccessFile name="test" fileName="/logs/test.log" filePattern="/logs/test.log.%d{yyyy-MM-dd}">
  <Policies>
    <TimeBasedTriggeringPolicy/>
  </Policies>
  <DefaultRolloverStrategy>
    <Delete basePath="/logs">
      <IfFileName glob="test.log.*" />
      <IfLastModified age="30d" />
    </Delete>
  </DefaultRolloverStrategy>
</RollingRandomAccessFile>

请注意,删除过程可能会影响任何文件,而不仅仅是日志文件,这一点非常重要:请确保参数化正确的执行路径,并提供正确的 glob 使用此功能时的模式。

dbf7pr2w

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
您可以使用适当的触发策略和滚动策略进一步自定义。

相关问题