1. Список фільтрів

Логгер дозволяє дуже круто налаштувати фільтрацію повідомлень. Для цього в нього є пара десятків фільтрів із різними параметрами. Нижче в таблиці наведено найпопулярніші з них:

Фільтри Опис
1 BurstFilter Дозволяє керувати частотою повідомлень за секунду для вказаного рівня логування.
2 CompositeFilter Дозволяє вказати кілька послідовних фільтрів.
3 DynamicThresholdFilter Дозволяє вмикати детальне логування, якщо у лозі зустрілася певна інформація.
4 MapFilter Дозволяє побудувати складний логічний вираз для фільтра з кількох параметрів.
5 MarkerFilter Дозволяє фільтрувати повідомлення за тегами, тег потрібно попередньо додати під час логування події.
6 RegexFilter Дозволяє встановити маску – регулярний вираз.
7 StructuredDataFilter Дозволяє фільтрувати повідомлення щодо наявності в них певних даних.
8 ThreadContextMapFilter Дозволяє керувати фільтрами на основі даних, які взято з контексту нинішнього потоку.
9 ThresholdFilter Керування логуванням на основі рівня повідомлення лога.
10 TimeFilter Дозволяє вмикати та вимикати фільтри у певний час.

Нижче ми розповімо лише про три з них. Більш детально ви можете ознайомитись з цими фільтрами на їхньому офіційному сайті.

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>

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>

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>