2014-01-14 2 views
0

Я пытаюсь настроить log4j2 для записи скользящего файла журнала на диск, но я не могу заставить его работать. На заданном пути не появляется файл журнала, и сервер Glassfish server.log вообще не показывает никаких журналов Spring. Я прочитал много подобных вопросов о SO, но ни одно из предлагаемых решений не сработало в этом случае. Может кто-нибудь мне помочь? Я использую Spring 3.0 на сервере приложений Glassfish 3.1.Не удается получить RollingFile, работающий с log4j2

С моей pom.xml:

<properties> 
    <junit.version>4.11</junit.version> 
    <tiles.version>3.0.3</tiles.version> 
    <slf4j.version>1.7.5</slf4j.version> 
    <log4j.version>2.0-beta9</log4j.version> 
</properties> 
<dependencies> 
    <dependency> 
     <artifactId>jcl-over-slf4j</artifactId> 
     <groupId>org.slf4j</groupId> 
     <version>${slf4j.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>${log4j.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-slf4j-impl</artifactId> 
     <version>${log4j.version}</version> 
    </dependency> 
</dependencies> 

А вот мой log4j.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="INFO"> 
    <Properties> 
     <Property name="fileName" value="C:/temp/rolling-file.log"/> 
     <Property name="fileNamePattern" value="C:/temp/rolling-file-$d{dd-MM-yyyy}-%i.log"/> 
     <Property name="logPattern" value="%d{dd-MM-yyyy HH:mm:ss,SSS} [%t] %-5p %c - %m%n"/> 
    </Properties> 

    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="${logPattern}"/> 
     </Console> 
     <RollingFile name="RollingFile" fileName="${fileName}" filePattern="${fileNamePattern}"> 
      <PatternLayout pattern="${logPattern}"/> 
      <Policies> 
       <TimeBasedTriggeringPolicy/> 
       <SizeBasedTriggeringPolicy size="20MB"/> 
      </Policies> 
      <DefaultRolloverStrategy max="10"/> 
     </RollingFile> 
    </Appenders> 
    <Loggers> 
     <Logger name="my.root.package" level="info" additivity="false"> 
      <AppenderRef ref="Console"/> 
      <AppenderRef ref="RollingFile"/> 
     </Logger> 
     <Root level="info"> 
      <AppenderRef ref="Console"/> 
     </Root> 
    </Loggers> 
</Configuration> 
+1

Получаете ли вы полезный вывод при установке атрибута 'status' элемента' Configuration' для «отладки»? – mthmulders

+0

Пробовал, нет разницы. Я просто получаю журнал Glassfish о запуске приложений и настроенных источниках данных. Ничего не связано с Spring или моими собственными заявлениями о регистрации. – Hanno

+2

Вы используете log4j 2, и поэтому конфигурация должна быть названа 'log4j2.xml', а не' log4j.xml'. См. Http://logging.apache.org/log4j/2.x/manual/configuration.html (Автоматическая настройка, bullet 5). –

ответ

2

Помимо отличной отправной точки, сделанного М. Deinum, оказывается, мой log4j2.xml необходимо изменить следующие:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="DEBUG"> 
    <Properties> 
     <Property name="fileName">C:/temp/rolling-file.log</Property> 
     <Property name="fileNamePattern">C:/temp/rolling-file-%d{dd-MM-yyyy}-%i.log</Property> 
     <Property name="logPattern">%d{dd-MM-yyyy HH:mm:ss,SSS} [%t] %-5p %c - %m%n</Property> 
    </Properties> 
    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="${logPattern}"/> 
     </Console> 
     <RollingFile name="MyRollingFile" fileName="${fileName}" filePattern="${fileNamePattern}"> 
      <PatternLayout pattern="${logPattern}"/> 
      <Policies> 
       <TimeBasedTriggeringPolicy/> 
       <SizeBasedTriggeringPolicy size="20MB"/> 
      </Policies> 
      <DefaultRolloverStrategy max="10"/> 
     </RollingFile> 
    </Appenders> 
    <Loggers> 
     <Logger name="my.root.package" level="info" additivity="false"> 
      <AppenderRef ref="Console"/> 
      <AppenderRef ref="MyRollingFile"/> 
     </Logger> 
     <Root level="info"> 
      <AppenderRef ref="Console"/> 
     </Root> 
    </Loggers> 
</Configuration> 

Выполненных изменения:

  • В value атрибутах Property элементы не были правильно разобраны. Указание их как тела элемента Property, похоже, решает это.
  • Ошибка в стоимости имущества fileNamePattern. Я использовал $d для обозначения даты, но должен быть %d.
  • Видимо log4j2 не нравится элемент RollingFile с именем «RollingFile». После того, как я изменил его, началось ведение журнала.
0

Вам может понадобиться включить log4j-API для зависимостей (пом http://logging.apache.org/log4j/2.x/faq.html#which_jars).

О свойствах: если проблема исчезнет, ​​помещая значения в конфигурации непосредственно:

<RollingFile name="RollingFile" fileName="C:/temp/rolling-file.log" 
      filePattern="C:/temp/rolling-file-$d{dd-MM-yyyy}-%i.log"> 
    <PatternLayout pattern="%d{dd-MM-yyyy HH:mm:ss,SSS} [%t] %-5p %c - %m%n"/> 

, то вы, возможно, нашли ошибку. В таком случае, можете ли вы повысить эту проблему в log4j2 Jira issue tracker?

+0

Спасибо за ваш ответ, Ремко. Как выясняется, зависимость log4j-api будет включаться автоматически при включении log4j-core. Я получил свойства, работающие с некоторыми изменениями, я отправлю их в качестве ответа для дальнейшего использования. – Hanno

Смежные вопросы