Предоставляет ли log4j какой-либо механизм для ежедневного архивирования журнала?

Предоставляет ли log4j 1.2 какой-либо механизм для ежедневного архивирования журнала?

Все говорят, что я могу сделать это через org.apache.log4j.rolling.TimeBasedRollingPolicy, но в источниках 1.2.15 я не вижу никакого класса TimeBasedRollingPolicy.

Я нашел решение:

<appender name="FILE" class="org.apache.log4j.rolling.RollingFileAppender">
   <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>

   <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
       <param name="ActiveFileName" value="${jboss.server.log.dir}/server.log"/>
       <!-- roll log file once a day -->
       <param name="FileNamePattern" value="${jboss.server.log.dir}/archives/server.log.%d.gz"/>
   </rollingPolicy>

   <!-- A PatternLayout that limits the number of lines in stack traces -->
   <layout class="com.mtvi.log4j.StackTraceLimitingPatternLayout">
       <!-- The full pattern: Date MS Priority [Category] (Thread) Message\n -->
       <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n"/>
   </layout>
</appender>

4 ответа

Решение

Вам нужно определить ваш appender как DailyRollingFileAppender и определить шаблон даты, который будет соответствовать дневной детализации. Ниже приведен пример приложения с именем file, который выводит файл application.log и ежедневно прокручивает файл, добавляя дату к концу после полуночи и запуская новый файл.

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=application.log
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %5p [%t] - %m%n

Затем вам нужно будет определить ваши логгеры (или rootLogger) для вывода на этот аппендер. Например:

log4j.rootLogger=debug, file

То, что вы спрашиваете, можно сделать с помощью DailyRollingFileAppender.

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=application.log
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %5p [%t] - %m%n

Настройка файла log4j.Appender.file, как указано выше, в моем файле application.properties, похоже, не работает в моем приложении SpringBootApplication. В конце концов, я использовал решение для файла logback-spring.xml. Файл помещается в src/main/recources (папка по умолчанию, куда вы обычно помещаете свой файл application.properties).

В файле pom.xml не требуется зависимости maven, но создайте папку / logs / archived в корневом каталоге вашего приложения. Файл 'nameOfYourLog.log' будет автоматически заархивирован на следующий день в папку./logs/archived. Поскольку эта папка расположена за пределами вашего файла JAR, она легко доступна для просмотра журнала (на нужную дату), когда она развернута на рабочем сервере.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <property name="DEV_HOME" value="./logs" />
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
            </Pattern>
        </layout>
    </appender>
    <!--<appender name="FILE-AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
    <appender name="FILE-AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${DEV_HOME}/nameOfYourLog.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} - %msg%n
            </Pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${DEV_HOME}/archived/debug.%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <logger name="com.the.package.you.wish.to.log" level="debug" additivity="false">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE-AUDIT" />
    </logger>

    <root level="error">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE-AUDIT" />
    </root>

</configuration>

Использование log4j-extras:

<appender name="FILE" class="org.apache.log4j.rolling.RollingFileAppender">
   <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>

   <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
       <param name="ActiveFileName" value="${jboss.server.log.dir}/server.log"/>
       <!-- roll log file once a day -->
       <param name="FileNamePattern" value="${jboss.server.log.dir}/archives/server.log.%d.gz"/>
   </rollingPolicy>

   <!-- A PatternLayout that limits the number of lines in stack traces -->
   <layout class="com.mtvi.log4j.StackTraceLimitingPatternLayout">
       <!-- The full pattern: Date MS Priority [Category] (Thread) Message\n -->
       <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n"/>
   </layout>
</appender>

Примечание. Этот ответ был извлечен из вопроса ОП, чтобы сохранить правильный формат, установленный Stack Exchange. (ОП явно не ответил на комментарий jbx.)

Другие вопросы по тегам