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>