Предоставляет ли 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.)