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>
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ