Настройка RollingFileAppender в log4j - PullRequest
40 голосов
/ 25 февраля 2011

Я работаю над набором веб-сервисов, и нам бы хотелось иметь ежедневный ротационный журнал.

Я пытаюсь получить org.apache.log4j.rolling.RollingFileAppender от работающего дополнения log4j extras, поскольку документация предполагает, что это лучше всего подходит для производственных сред.

У меня есть и основная библиотека log4J (log4j-1.2.15.jar), и дополнительная библиотека log4j (apache-log4j-extras-1.1.jar) на пути к классам.

У меня есть следующая конфигурация для appender в файле log4j.properties:

### SOAP Request Appender
log4j.appender.request=org.apache.log4j.rolling.RollingFileAppender
log4j.appender.request.File=SOAPmessages.log
log4j.appender.request.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.request.RollingPolicy.ActiveFileName =SOAPmessages-%d.log
log4j.appender.request.RollingPolicy.FileNamePattern=SOAPmessages-%d.log.zip
log4j.appender.request.layout = org.apache.log4j.PatternLayout
log4j.appender.request.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

Однако, когда я запускаю веб-сервис с log4j в режиме отладки, я получаю следующие сообщения об ошибках:

log4j: Parsing appender named "request".
log4j: Parsing layout options for "request".
log4j: Setting property [conversionPattern] to [%d{ABSOLUTE} %5p %c{1}:%L - %m%n].
log4j: End of parsing for "request".
log4j: Setting property [file] to [/logs/SOAPmessages.log].
log4j:WARN Failed to set property [rollingPolicy] to value "org.apache.log4j.rolling.TimeBasedRollingPolicy". 
log4j:WARN Please set a rolling policy for the RollingFileAppender named 'request'
log4j: Parsed "request" options.

Я нашел документацию о том, как настроить этот appender, немного, так что может кто-нибудь помочь мне исправить мою конфигурацию?

EDIT0: Добавлен вывод режима отладки, а не только стандартные предупреждения

Ответы [ 8 ]

59 голосов
/ 18 мая 2011

У меня была похожая проблема, и я просто нашел способ ее решить (пошагово пройдя через log4j-extras источник, не менее ...)

Хорошая новость заключается в том, что, в отличие от того, что написано везде,получается, что вы на самом деле МОЖЕТЕ настроить TimeBasedRollingPolicy с помощью log4j.properties (конфигурация XML не требуется! По крайней мере, в версиях log4j> 1.2.16 см. отчет об ошибках )

Вот пример:

log4j.appender.File = org.apache.log4j.rolling.RollingFileAppender
log4j.appender.File.rollingPolicy = org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.File.rollingPolicy.FileNamePattern = logs/worker-${instanceId}.%d{yyyyMMdd-HHmm}.log

Кстати, бит ${instanceId} - это то, что я использую в Amazon EC2, чтобы отличать журналы от всех моих работников - мне просто нужно установить это свойство перед вызовом PropertyConfigurator.configure(), следующим образом:

p.setProperty("instanceId", EC2Util.getMyInstanceId());
PropertyConfigurator.configure(p);
19 голосов
/ 19 сентября 2012

Столкнулся с большим количеством проблем при выполнении этой работы.Вот подробности:

  1. Чтобы загрузить и добавить apache-log4j-extras-1.1.jar в classpath, сначала не заметил этого.
  2. RollingFileAppender должно быть org.apache.log4j.rolling.RollingFileAppender вместоorg.apache.log4j.RollingFileAppender.Это может привести к ошибке: log4j:ERROR No output stream or file set for the appender named [file].
  3. Нам пришлось обновить библиотеку log4j с log4j-1.2.14.jar до log4j-1.2.16.jar.

Ниже приведена конфигурация appender, которая работала для меня:

<appender name="file" class="org.apache.log4j.rolling.RollingFileAppender">
        <param name="threshold" value="debug" />
        <rollingPolicy name="file"
            class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
            <param name="FileNamePattern" value="logs/MyLog-%d{yyyy-MM-dd-HH-mm}.log.gz" />
            <!-- The below param will keep the live update file in a different location-->
            <!-- param name="ActiveFileName" value="current/MyLog.log" /-->
        </rollingPolicy>

        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %m%n" />
        </layout>
</appender>
15 голосов
/ 04 марта 2011

Обновление: по крайней мере, еще в 2013 году (см. Комментарий Мубашара) это начало работать.


Согласно Log4jXmlFormat вы не можете настроить его с помощью log4j.properties, но только используяформат конфигурации XML:

Обратите внимание, что TimeBasedRollingPolicy можно настроить только с xml, а не log4j.properties

К сожалению, предоставляемый ими пример log4j.xml не работаетлибо:

log4j:ERROR Parsing error on line 14 and column 76
log4j:ERROR Element type "rollingPolicy" must be declared.
...
log4j:WARN Please set a rolling policy for the RollingFileAppender named 'FILE'
4 голосов
/ 14 марта 2011

Toolbear74 является правильным log4j.XML требуется.Чтобы получить XML для проверки, теги <param> должны быть ДО <rollingPolicy>. Я предлагаю установить порог ведения журнала <param name="threshold" value="info"/>

. При создании файла Log4j.xml не забудьте скопироватьlog4j.dtd в том же месте.

Вот пример:

<?xml version="1.0" encoding="windows-1252"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<!-- Daily Rolling File Appender that compresses old files -->
  <appender name="file" class="org.apache.log4j.rolling.RollingFileAppender" >
     <param name="threshold" value="info"/>
     <rollingPolicy name="file"  
                      class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
        <param name="FileNamePattern" 
               value="${catalina.base}/logs/myapp.log.%d{yyyy-MM-dd}.gz"/>
        <param name="ActiveFileName" value="${catalina.base}/logs/myapp.log"/>
     </rollingPolicy>
     <layout class="org.apache.log4j.EnhancedPatternLayout" >
        <param name="ConversionPattern" 
               value="%d{ISO8601} %-5p - %-26.26c{1} - %m%n" />
    </layout>
  </appender>

  <root>
    <priority value="debug"></priority>
    <appender-ref ref="file" />
  </root>
</log4j:configuration>

Учитывая, что вы установили FileNamePattern и ActiveFileName Я думаю, что установка Fileсвойство является избыточным и, возможно, даже ошибочным

Попробуйте переименовать ваши log4j.properties и добавить log4j.xml, как в моем примере, и посмотрите, что произойдет.

3 голосов
/ 23 октября 2012

Относительно ошибки: log4j:ERROR Element type "rollingPolicy" must be declared

  1. Используйте версию log4j.jar, более новую, чем log4j-1.2.14.jar, с log4j.dtd определяющим rollingPolicy.
  2. Проверьте, не упакованы ли внутри каких-либо других сторонних файлов, которые вы используете, возможно, более старая версия log4j.jar.Если это так, убедитесь, что ваш log4j.jar стоит первым в порядке перед третьей стороной, содержащей более старый log4j.jar.
2 голосов
/ 11 января 2017

В Log4j2 lib "extras" больше не является обязательным. Также изменился формат конфигурации.

Пример приведен в документации Apache

property.filename = /foo/bar/test.log

appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = /foo/bar/rolling/test1-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d %p %C{1.} [%t] %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 2
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=100MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 5


logger.rolling.name = com.example.my.class
logger.rolling.level = debug
logger.rolling.additivity = false
logger.rolling.appenderRef.rolling.ref = RollingFile
0 голосов
/ 24 марта 2012

У вас неверное имя пакета

org.apache.log4j.rolling.RollingFileAppender 

Правильное имя:

org.apache.log4j.RollingFileAppender 
0 голосов
/ 25 февраля 2011

Я с подозрением отношусь к свойству ActiveFileName. Согласно javadoc log4j, в классе TimeBasedRollingPolicy такого свойства нет. (Нет setActiveFileName или getActiveFileName методов.)

Я не знаю, что будет делать указание неизвестного свойства, но возможно, что оно приведет к тому, что содержащий объект будет заброшен, и это может привести к предупреждениям, которые вы видели.

Попробуйте оставить это и посмотреть, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...