1. Список апендерів
Логер дозволяє зберігати дані одразу в декілька файлів. Такі вихідні потоки даних називаються апендерами (від append). Існує досить багато стандартних апендерів, тому ми розглянемо лише найпопулярніші з них:
| Апендери | Опис | |
|---|---|---|
| 1 | Console | Виводить дані в консолі |
| 2 | File | Виводить дані у файл |
| 3 | DailyRollingFile | Виводить дані у файл, файл циклічно перезаписується |
| 4 | Async | Дозволяє писати дані в інший апендер асинхронно |
| 5 | Socket | Пише дані у певний сокет |
| 6 | JDBC | Пише повідомлення до бази за протоколом JDBC |
| 7 | JPA | Пише повідомлення до бази за протоколом JPA |
| 8 | HTTP | Шле події HTTP-протоколом на віддалений сервер |
| 9 | SMTP | Складає повідомлення в буфер, а потім надсилає у вигляді email'а |
Хороша документація щодо всіх апендерів є на їхньому офіційному сайті.
А тепер ми розглянемо найпопулярніші та найпростіші з них.
2. ConsoleAppender
Найпростіший апендер – це ConsoleAppender. Як ти вже здогадуєшся, він пише свої повідомлення просто в консолі. Він має кілька цікавих нам параметрів:
| Атрибути | ||
|---|---|---|
| 1 | name | Ім'я апендера |
| 2 | filter | Дозволяє відфільтрувати частину повідомлень |
| 3 | layout | Встановлює форматування повідомлень під час виведення |
| 4 | target | Вказує, куди пишемо: SYSTEM_OUT або SYSTEM_ERR |
Налаштувати його дуже просто:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%m%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
3. FileAppender
Найкорисніший апендер – це FileAppender. На відміну від ConsoleAppender він пише свої повідомлення у файл. Що дуже корисно, коли твоя програма працює десь на сервері. В нього купа властивостей, оскільки він має вміти писати файли у різних операційних системах.
Але ми розглянемо лише найпопулярніші з них:
| 1 | name | Вказує ім'я апендера |
| 2 | filter | Дозволяє відфільтрувати частину повідомлень |
| 3 | layout | Встановлює форматування повідомлень під час виведення |
| 4 | fileName | Вказує ім'я файлу, в який треба писати повідомлення |
| 5 | append | Якщо true, повідомлення допишуться в старий лог, якщо false – лог-файл буде створюватися наново щоразу під час запуску програми. |
| 6 | bufferSize | Встановлює розмір буфера в байтах |
| 7 | immediateFlush | Якщо true, кожне повідомлення одразу пишеться на диск (без буфера). Лог починає працювати повільно, але це рятує від втрати даних під час падіння програми. |
Ти вже вмієш добре працювати з файлами, тому в цих налаштуваннях для тебе нема нічого нового. Налаштувати такий логер навіть простіше ніж консольний:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<File name="MyFile" fileName="logs/app.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>
4. RollingFileAppender
Найпопулярніший апендер – це RollingFileAppender. На відміну від FileAppender він дозволяє розбити лог на багато маленьких файлів. Це супер актуально для великих логів. До того ж, він дозволяє встановити правила: що робити зі старими файлами після того, як почали писатися нові.
У цього апендера майже під сотню різних налаштувань. Докладніше з ними можна ознайомитися за цим посиланням.
Розглянемо найпопулярніші атрибути цього апендера:
| Атрибути | ||
|---|---|---|
| 1 | name | Встановлює ім'я апендера |
| 2 | filter | Дозволяє відфільтрувати частину повідомлень |
| 3 | layout | Встановлює форматування повідомлень під час виведення |
| 4 | fileName | Вказує ім'я файлу, в який потрібно писати повідомлення |
| 5 | filePattern | Встановлює шаблон імен для архівних файлів, які більше не пишуться |
| 6 | policy | Встановлює умову, коли файл повинен почати перезаписуватися |
| 7 | strategy | Описує, що робити зі старими файлами: архівувати, за скільки днів історію зберігати тощо. |
Ось хороший приклад:
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout> <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> </PatternLayout>
<Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="250 MB"/> </Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
За допомогою параметра filePattern встановлено шаблон для архівів старих логів. Також тут є два параметри, при спрацьовуванні яких писатиметься новий файл:
TimeBasedTriggeringPolicy– спрацює, якщо розпочнеться нова доба (поміняється поточна дата)SizeBasedTriggeringPolicy- спрацює, якщо розмір файлу досягне 250Мб
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ