В процессе создания Java Web с помощью платформы SSM необходимо выполнять обработку журналов. Я столкнулся с множеством проблем при настройке logback, поэтому я углубился в его изучение. Помимо введения во многие блоги, я также читал официальную документацию logback, после прочтения которой нужно записывать увиденное.
Во-первых, давайте представим состав Appender
Диаграмма классов Appender выглядит следующим образом:
ConsoleAppender
ConsoleAppender для вывода журнала консоли Официальная документация дает пример того, как это написать
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
- Роль
заключается в форматировании журнала, преобразовании его в массив байтов и выводе преобразованного массива байтов в OutputStream. До появления кодировщиков Layout в основном использовался для форматирования журналов.
В настоящее время PatternLayoutEncoder — единственный действительно полезный кодировщик. Он просто охватывает большую часть работы вокруг PatternLayout. Подробнее см. https://logback.qos.ch/manual/encoders.html.
FileAppender
FileAppender используется для сохранения журналов в виде файлов. Конфигурация примера официальной документации выглядит следующим образом
<configuration>
<!-- Insert the current time formatted as "yyyyMMdd'T'HHmmss" under
the key "bySecond" into the logger context. This value will be
available to all subsequent configuration elements. -->
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<!-- use the previously created timestamp to create a uniquely
named log file -->
<file>log-${bySecond}.txt</file>
<encoder>
<pattern>%logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
может использовать этот атрибут для записи времени синтаксического анализа этого файла конфигурации (в настоящее время я не могу придумать никакого применения) Адрес и имя файла записи
RollingFileAppender
RollingFileAppender — это расширение FileAppender. По сравнению с его родительским классом, его основная роль заключается в записи скользящих журналов. RollingFileAppender имеет два важных подкомпонента: RollingPolicy и TriggeringPolicy. RollingPolicy определяет метод свертывания журналов, а TriggeringPolicy определяет условия срабатывания для свертывания журналов. (На самом деле, RollingPolicy также может определять условия срабатывания прокрутки.)
Стратегия прокатки RollingPolicy включает в себя следующее:
TimeBasedRollingPolicy
Стратегия прокрутки на основе времени. Это, вероятно, наиболее часто используемая стратегия прокрутки. Конфигурация примера официальной документации выглядит следующим образом
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logFile.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 30 days' worth of history capped at 3GB total size -->
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
Имя прокручиваемого файла также включает выбор времени прокрутки. Количество сохраняемых архивных файлов относительно предыдущего файла fileNamePattern. Предполагая, что определение равно 6, когда fileNamePattern в днях, он сохранит журналы за 6 дней, а если в месяцах, он сохранит журналы за 6 месяцев. Старые журналы удаляются асинхронно. Размер всех заархивированных журналов. При превышении лимита старые журналы архива удаляются.
SizeAndTimeBasedRollingPolicy
SizeAndTimeBasedRollingPolicy — это скользящая политика, основанная на времени и размере файла. Конфигурация примера официальной документации выглядит следующим образом
<configuration>
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>mylog.txt</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
<maxFileSize>100MB</maxFileSize>
<maxHistory>60</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="ROLLING" />
</root>
</configuration>
FixedWindowRollingPolicy
Стратегия прокрутки в зависимости от размера окна. Это может показаться немного сложным для понимания, на самом деле, грубо говоря, это запись архивного лог-файла в следующий файл, а размер окна — это максимально допустимое количество лог-файлов. Конфигурация примера официальной документации выглядит следующим образом
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>test.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>tests.%i.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
нижний предел окна. Нижний предел обычно равен 1. верхний предел окна. Как правило, мы можем использовать верхний предел.
SizeBasedTriggeringPolicy
SizeBasedTriggeringPolicy на самом деле является TriggeringPolicy (определяет, когда бросить), и кажется, что на данный момент существует только такая TriggeringPolicy. Основная функция заключается в выполнении прокрутки журнала после того, как архивный файл журнала достигнет определенного размера. Согласно Интернету, TimeBasedRollingPolicy и SizeBasedTriggeringPolicy конфликтуют и не могут использоваться одновременно.
В старой версии logback timeBasedFileNamingAndTriggeringPolicy (класс реализации — SizeAndTimeBasedFNATP) можно настроить в RollingPolicy TimeBasedRollingPolicy для реализации стратегии скользящей настройки времени и размера файла одновременно; в новой версии SizeAndTimeBasedRollingPolicy может удовлетворять обоим требованиям. в то же время.
приложение:
Ниже приведена конфигурация Appender в старой версии:
<!-- 日志文件输出 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.base}/${log.moduleName}.log</File><!-- 设置日志不超过${log.max.size}时的保存路径,注意如果 是web项目会保存到Tomcat的bin目录 下 -->
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.base}/${log.moduleName}_all_%d{yyyy-MM-dd}.%i.log.zip
</FileNamePattern>
<!-- 当天的日志大小 超过${log.max.size}时,压缩日志并保存 -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${log.max.size}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 日志输出的文件的格式 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{56}.%method:%L -%msg%n</pattern>
</layout>
</appender>
Для конфигурации SizeAndTimeBasedRollingPolicy в новой версии официальные примеры следующие:
<configuration>
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>mylog.txt</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
<maxFileSize>100MB</maxFileSize>
<maxHistory>60</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="ROLLING" />
</root>
</configuration>