5.1 Список фильтров
Логгер позволяет очень круто настроить фильтрацию сообщений. Для этого у него есть пара десятков фильтров со всевозможными параметрами. Ниже в таблице приведены самые популярные из них
| Фильтры | Описание | |
|---|---|---|
| 1 | BurstFilter | Позволяет управлять частотой сообщений в секунду для заданного уровня логирования. |
| 2 | CompositeFilter | Позволяет задать несколько последовательных фильтров. |
| 3 | DynamicThresholdFilter | Позволяет включать детальное логирование, если в логе встретилась определенная информация. |
| 4 | MapFilter | Позволяет построить сложное логическое выражение для фильтра из нескольких параметров. |
| 5 | MarkerFilter | Позволяет фильтровать сообщения по тегам, тег предварительно должен быть добавлен во время логирования события. |
| 6 | RegexFilter | Позволяет задать маску – регулярное выражение. |
| 7 | StructuredDataFilter | Позволяет фильтровать сообщения по наличию в них определенных данных. |
| 8 | ThreadContextMapFilter | Позволяет управлять фильтрами на основе данных, взятых из контекста текущего потока. |
| 9 | ThresholdFilter | Управляет логированием на основе уровня сообщения лога. |
| 10 | TimeFilter | Позволяет включать и выключать фильтры в определенное время. |
Ниже мы расскажем всего про три из них. Более детально вы можете ознакомиться с этими фильтрами на их официальном сайте.
5.2 TimeFilter
Фильтр TimeFilter позволяет включать и выключать фильтры в определенное время, имеет 5 параметров:
| 1 | start | Время старта логирования в формате HH:mm:ss |
| 2 | end | Время выключения логирования в формате HH:mm:ss |
| 3 | timezone | Задает временную зону. |
| 4 | onMatch | Как логировать, если условие фильтра истинно. Может быть ACCEPT, DENY или NEUTRAL. По умолчанию NEUTRAL. |
| 5 | onMismatch | Как логировать, если условие фильтра ложно. Может быть ACCEPT, DENY или NEUTRAL. По умолчанию NEUTRAL. |
Давайте настроим фильтр, который будет включать логирование в 5 утра и выключать его в 5:30 утра каждый день. Пример с полной конфигурацией фильтра ниже:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
<TimeFilter start="05:00:00" end="05:30:00" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<pattern>%d %p %c{1.} [%t] %m%n</pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy />
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
5.3 RegexFilter
Фильтр RegexFilter позволяет задать маску (регулярное выражение) для фильтрации сообщений. Этот фильтр имеет 4 параметра:
| 1 | regex | Задает регулярное выражение – маску, которая применяется для фильтрации сообщений.HH:mm:ss |
| 2 | useRawMsg | Маска применяется в сообщении до форматирования (true) или после форматирования (false) |
| 3 | onMatch | Как логировать, если условие фильтра истинно. Может быть ACCEPT, DENY или NEUTRAL. По умолчанию NEUTRAL. |
| 4 | onMismatch | Как логировать, если условие фильтра ложно. Может быть ACCEPT, DENY или NEUTRAL. По умолчанию NEUTRAL. |
Давайте настроим фильтр, который будет пропускать только сообщения, содержащие слово javarush. Пример с полной конфигурацией фильтра ниже:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
<RegexFilter regex=".* javarush .*" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<pattern>%d %p %c{1.} [%t] %m%n</pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy />
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
5.4 ThresholdFilter
Фильтр ThresholdFilter позволяет настроить фильтрацию по уровню сообщений. Он имеет всего 3 параметра:
| 1 | level | Задает имя уровня логирования сообщений: ERROR, DEBUG, … |
| 2 | onMatch | Как логировать, если условие фильтра истинно. Может быть ACCEPT, DENY или NEUTRAL. По умолчанию NEUTRAL. |
| 3 | onMismatch | Как логировать, если условие фильтра ложно. Может быть ACCEPT, DENY или NEUTRAL. По умолчанию NEUTRAL. |
Давайте настроим фильтр, который будет пропускать только сообщения уровня DEBUG. Пример с полной конфигурацией фильтра ниже:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
<ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<pattern>%d %p %c{1.} [%t] %m%n</pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy />
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ