0

我在我的 log4j2.xml 配置中添加了一个简单的 Appender,以通过 PRICES 标记基本上注销一些价格(以 csv 格式):

<RollingFile name="prices"
         fileName="${log-path}/prices.csv"
         filePattern="${log-path}/prices.csv.%d{yyyy-MM-dd}">
  <MarkerFilter marker="PRICES" onMatch="ACCEPT" onMismatch="DENY"/>
  <PatternLayout>
    <pattern>%m%n</pattern>
  </PatternLayout>
  <Policies>
    <TimeBasedTriggeringPolicy/>
  </Policies>
</RollingFile>

每天在特定时间(假设是晚上 8 点),代码将使用 PRICES 标记记录一些内容,该标记应该转到该文件。它通常有效,但有一个奇怪的行为:

记录的第一行不会进入今天的文件,而是进入昨天的文件。

所以在我看来,它只有在写完第一行之后才会滚动。当然这有点烦人,所以我的问题是:我怎样才能防止这种情况发生?

4

1 回答 1

1

OnStartupTriggeringPolicy也许您可以通过在配置中包含一个minSize属性等于0默认为1)来解决这个问题Policies。基本上,它将为您提供一种在每次 JVM 启动并且达到或超过指示的最小文件大小时轮换日志的方法:

<Policies>
  <OnStartupTriggeringPolicy minSize="0" />
  <TimeBasedTriggeringPolicy/>
</Policies>

这个SO question中描述了与您面临的问题类似的问题。

于 2021-02-02T17:07:16.057 回答