log4j2 RollingFile 追加器

log4j2 RollingFile appender

我想使用 Apache log4j2 库中定义的 RollingFile appender,在每次启动应用程序时生成一个新的日志文件。

根据文档,您可以找到 here:

OnStartup Triggering Policy

The OnStartupTriggeringPolicy policy causes a rollover if the log file is older than the current JVM's start time and the minimum file size is met or exceeded.

OnStartupTriggeringPolicy Parameters

Parameter Name Type Description

minSize long The minimum size the file must have to roll over. A size of zero will cause a roll over no matter what the file size is. The default value is 1, which will prevent rolling over an empty file.

我定义了这个配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>

    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>

    <RollingFile name="fDLL.test.rollingfile" append="False" 
              filename="d:/logs/fdll-test.log" filePattern="d:/logs/fdll-test-%i.log" >

       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>

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

  </Appenders>

  <Loggers>
    <Root level="all">
      <AppenderRef ref="Console"/>
    </Root>

  <Logger name="fDLL.test" level="all" additivity="False">
      <AppenderRef ref="Console"/>
      <AppenderRef ref="fDLL.test.rollingfile"/>
    </Logger>

  </Loggers>
</Configuration>

如果我 运行 该程序,我会收到此错误消息:

2019-02-08 13:00:35,506 ERROR OnStartupTriggeringPolicy contains an invalid element or attribute "minSize"

我无法理解错误信息。如果我使用其他值,例如 0 MB0MB 或任何其他值为 0 的值,则没有任何变化。

在这两种情况下,有或没有属性 minSize,我最终在日志目录中得到一个文件,即 fdll-test.log.

我错过了什么?


主要class是这样的:

package fDLL.test;

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

public class TestLogging {
    private static final Logger logger = LogManager.getLogger(TestLogging.class.getPackage().getName());

    public static void main(String[] args) {
        System.out.println("Test");
        logger.warn("warning");
        logger.info("info");
        logger.error("error");
    }
}

试试这个

 <Appender type="RollingFile" name="RollingFile" fileName="demo.log">
        <Policies>
            <OnStartupTriggeringPolicy/>
            <SizeBasedTriggeringPolicy size="10MB" />
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        </Policies>
        <DefaultRolloverStrategy max="10"/>
        <Layout type="PatternLayout" pattern="%d{HH:mm:ss.SSS} [%level] [%C{1}] %message%n"/>
</Appender>

问题是您在配置中设置了 append="False"

根据 log4j2 manual

When true - the default, records will be appended to the end of the file. When set to false, the file will be cleared before new records are written.

这意味着 log4j2 将在写入文件之前清除文件,这意味着大小将为零并且不需要翻转。如果您删除此参数或设置为 true,则每次启动程序时都会创建一个新文件。