2013-12-17 45 views
1

我在log4j2log4j2 RollingFile追加程序需要

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

但是定義的RollingFile追加程序的日期模式,當我嘗試運行此我得到一個錯誤

IllegalStateException異常:模式不包含日期在 org.apache.logging.log4j.core.appender.rolling.PatternProcessor.getNExtTime(PatternProcessor.java:91)

一旦將日期模式放入filePattern中,例如locserver-%d{MM-dd-yyyy}-%i.log就會消失。但我不想在日誌名稱中使用日期。是我的配置錯誤或錯誤嗎?

回答

4

謝謝喬。 我終於明白了。

我在我的策略列表中有一個空的TimeBasedTriggeringPolicy標記,它迫使filePattern中的日期檢查。一旦我刪除它,它開始正常工作。

1

對我來說,它的工作方式與描述的here(使用log4j 2.0-beta9 & 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?

2

在RollingFile appender中,TimeBasedTrigerringPolicy檢查tag的filepattern屬性中的datepattern。在使用TimeBasedTrigerringPolicy時,指定datepattern是強制性的。

將裝有在filePattern一個SimpleDate模式,例如:

<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> 
%d{...}