log4j2 RollingFile附加器

时间:2019-02-08 12:23:02

标签: java log4j2

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

根据文档,您可以找到here

  

启动时触发策略

     

OnStartupTriggeringPolicy政策   如果日志文件早于当前JVM的日志文件,则会导致过渡   开始时间,并且达到或超过了最小文件大小。

     

OnStartupTriggeringPolicy参数

     

参数名称类型描述

     

minSize long文件必须翻转的最小大小。尺寸   不论文件大小是多少,零都将导致翻转。的   默认值为1,这将防止将空文件翻转。

我定义了此配置文件:

<?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

我想念什么?


主类是这样:

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");
    }
}

2 个答案:

答案 0 :(得分:1)

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

根据log4j2 manual

  

为true时-默认值,记录将附加到   文件。设置为false时,将在新记录之前清除文件   被写。

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

答案 1 :(得分:0)

尝试使用此

 <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>