log4j2 RollingFile Appender需要日期模式

时间:2013-12-17 06:04:34

标签: log4j2

我在log4j2中定义了一个RollingFile Appender

<RollingFile name="Locserver" append="true" fileName="locserver.log" filePattern="locserver-%i.log">
    <PatternLayout>
        <pattern>%d{ISO8601} [%t] %p %c %L - %m%n</pattern>
    </PatternLayout>
    <Policies>
        <SizeBasedTriggeringPolicy size="50 MB"></SizeBasedTriggeringPolicy>
                <DefaultRolloverStrategy>10</DefaultRolloverStrategy>
    </Policies>
</RollingFile>

然而,当我尝试运行时,我收到错误

  

IllegalStateException:Pattern不包含日期   org.apache.logging.log4j.core.appender.rolling.PatternProcessor.getNExtTime(PatternProcessor.java:91)

一旦我在filePattern中添加日期模式,locserver-%d{MM-dd-yyyy}-%i.log就会消失。但我不希望日志名称中的日期。我的配置是错误还是错误?

3 个答案:

答案 0 :(得分:5)

谢谢乔。 我终于明白了。

我的策略列表中有一个空的TimeBasedTriggeringPolicy标记,它强制在filePattern中进行日期检查。一旦我删除它,它就开始正常工作了。

答案 1 :(得分:3)

在RollingFile appender中,TimeBasedTrigerringPolicy检查tag的filepattern属性中的datepattern。在使用TimeBasedTrigerringPolicy时,必须指定datepattern。

%d{...}中放置包含SimpleDate模式的filePattern,例如:

<Appenders>
    <RollingFile name="RollingFile" fileName="logs/rpi_gpio_latest.log"
                 filePattern="logs/**%d{yyyy-MM-dd_HH}**_rpi_gpio_%i.log">
        <PatternLayout>
            <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="4 MB"/>
        </Policies>
        <DefaultRolloverStrategy fileIndex="max"/>
    </RollingFile>
</Appenders>

答案 2 :(得分:1)

对我来说,这就像描述here一样(使用log4j 2.0-beta9&amp; Java 1.7)。

我的log4j.xml(尺寸政策设置为1kB仅用于测试):

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
    </Console>
    <RollingFile name="Logfile"
                 fileName="Log/App.log"
                 filePattern="Log/App-%i.log">
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
      <Policies>
        <SizeBasedTriggeringPolicy size="1 KB"/>
      </Policies>
      <DefaultRolloverStrategy max="4"/>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="STDOUT"/>
      <AppenderRef ref="Logfile"/>
    </Root>
  </Loggers>
</Configuration>

使用配置片段时它也有效(我刚刚更正了DefaultRolloverStrategy设置):

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
    </Console>
    <RollingFile name="Locserver"
                 append="true"
                 fileName="locserver.log"
                 filePattern="locserver-%i.log">
      <PatternLayout>
          <pattern>%d{ISO8601} [%t] %p %c %L - %m%n</pattern>
      </PatternLayout>
      <Policies>
          <SizeBasedTriggeringPolicy size="50 MB"></SizeBasedTriggeringPolicy>
      </Policies>
      <DefaultRolloverStrategy max="4"/>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Logger name="eeo.tts" level="debug"/>
    <Root level="info">
      <AppenderRef ref="STDOUT"/>
      <AppenderRef ref="Locserver"/>
    </Root>
  </Loggers>
</Configuration>

您使用的是哪个版本的log4j2?