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>