2013-12-17 4 views
1

Я определил RollingFile Appender в log4j2log4j2 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: Шаблон не содержит дату в org.apache.logging.log4j.core.appender.rolling.PatternProcessor.getNExtTime (PatternProcessor.java:91)

Это исчезает, как только я помещаю шаблон даты в filePattern, например, locserver-%d{MM-dd-yyyy}-%i.log. Но мне не нужна дата в именах журналов. Ошибка или что-то не так с моей конфигурацией?

ответ

4

Thanks Joe. Я, наконец, понял это.

У меня был пустой тег TimeBasedTriggeringPolicy в списке моих политик, который заставлял проверку даты в файлеPattern. Как только я удалил его, он начал работать нормально.

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 TimeBasedTrigerringPolicy проверяет наличие datepattern в атрибуте filepattern тега. Указание datepattern является обязательным при использовании TimeBasedTrigerringPolicy.

Место %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> 
Смежные вопросы