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