Логирование приложения «Менеджер службы каталогов»
Приложение позволяет гибко настраивать логирование для выявления и фиксации возможных проблем в работе.
Настройка логирования выполняется в файле application.yml в секции logging:
Для работы с ротацией файла с лог-сообщениями и архивацией используется библиотека logback.
Настройки по умолчанию
После установки и запуска приложения по умолчанию логи пишутся в корневую директорию с указанными ниже параметрами (если не заданы иные значения):
logging:
level:
tech.inno.dsm: DEBUG
file:
name: dsm.log
logback:
rollingpolicy:
file-name-pattern: dsm_%d{yyyy-MM-dd}_archive-%i.log
max-file-size: 10MB
total-size-cap: 1000MB
max-history: 365
pattern:
file: "%d [%thread] %-5level %-50logger{40} - %msg%n"
Уровень логирования
Доступные уровни:
-
TRACE— самый низкий уровень ведения лога, используемый для записи подробной информации об отладке, в частности о ходе выполнения приложения; -
DEBUG— используется для отладки менее подробных сообщений, чем TRACE-сообщения. Эти сообщения дают представление о поведении приложения, что может быть полезно для устранения неполадок; -
INFO— уровень сообщений, описывающих нормальное поведение приложения. Помогают контролировать производительность приложения; -
WARN— уровень сообщений, описывающих потенциальные проблемы или предупреждения. Эти сообщения указывают на то, что произошло что-то неожиданное или потенциально проблемное, но приложение по-прежнему может нормально работать; -
ERROR— уровень указывает на сообщения, описывающие ошибки или исключения. Указывают, что с приложением что-то пошло не так, и необходимо предпринять корректирующие действия.
Пример:
logging:
level:
tech.inno.dsm: TRACE
Настройка вывода
Логи приложения могут выводиться на консоль, в файл, либо отправляться напрямую на сервер.
Запись логов в файл
Для записи логов в файл необходимо указать в блоке file параметр name с путем до файла.
Пример:
logging:
file:
name:
${LOG_FILE:dsm.log} # путь к файлу
Политики ротации файла с лог-сообщениями
При записи лог-сообщений в файл события постоянно добавляются в конец файла. Размер лог-файла постепенно увеличивается. При применении политики ротации текущий файл с лог-сообщениями в зависимости от заданных в конфигурации условий разбивается на несколько файлов, один из которых становится архивным файлом с лог-сообщениями, во второй продолжается запись новых лог-сообщений приложения.
К архивным файлам в целях экономии места на диске может быть применено сжатие.
Библиотека logback содержит секцию rollingpolicy, которая позволяет настроить политику ротации и архивацию.
Доступные параметры:
Определяет название лог-файла и частоту ротации.
Максимальный размер лог-файла.
Максимальный суммарный размер всех лог-файлов.
Максимальное количество лог-файлов.
Параметрами конфигурации можно задать максимальное время хранения архивных файлов, а также максимальный объем хранимых архивных файлов, по достижению которого более старые архивные файлы будут удалены.
Пример:
logging:
file:
name:
${LOG_FILE:dsm.log}
logback:
rollingpolicy:
file-name-pattern: ${LOG_FILE}_%d{yyyy-MM}_archive-%i.log
max-file-size: 500MB
total-size-cap: 1GB
max-history: 7
В данном примере запись логов всегда ведется в файл с именем dsm.log.
Первый триггер, по которому будет создан архивный файл, содержится в параметре file-name-pattern конфигурации. Где поле дата — %d{yyyy-MM} детализировано месяцем. В начале каждого месяца (далее — период ротации) будет создан архивный файл с лог-сообщениями с именем, например, для архива за январь: dsm.log_2023-01_archive-0.log. Все логи из текущего файла будут перенесены в него.
Второй триггер содержится в параметре max-file-size конфигурации.
max-file-size: 500MB — означает, что до истечения периода ротации, как только текущий файл, в который ведется запись логов, достигнет размера 500МБ, то будет создан архивный файл (файлы) с именем согласно шаблону, содержащемуся в file-name-pattern.
Также будет создан архивный файл с именем согласно шаблону, содержащемуся в file-name-pattern.
total-size-cap и max-history — параметры конфигурации, отвечающие за удаление архивных файлов, где первым применяется max-history: здесь задается количество архивных файлов, которое может быть приравнено периоду времени.
Например, если период ротации — месяц (в рассматриваемом примере), а max-history: 7, то максимальное количество хранимых архивных файлов будет равно 7 (эквивалентно периоду 7 месяцев). Но при этом, если в конфигурации задан параметр max-file-size, то до истечения периода ротации будут также созданы архивные файлы по достижению максимального размера текущего лог-файла.
Например:
-
dsm.log_2023-01_archive-0.log — архивация текущего лог-файла в начале февраля;
-
dsm.log_2023-02_archive-0.log — архивация текущего лог-файла в начале марта;
-
dsm.log_2023-03_archive-0.log — архивация по достижению размера текущего лог-файла в марте;
-
dsm.log_2023-03_archive-1.log — архивация текущего лог-файла в начале апреля.
total-size-cap параметр является необязательным и не работает без max-history. Отвечает за максимальный размер всех архивных файлов, по достижению которого более старые файлы (с меньшим индексом) будут удалены.
Отправка на сервер
В application.yml пропишите путь к файлу с конфигурациями (logback-udp.xml), необходимыми для отправки логов в GELF-формате на сервер Graylog по udp-протоколу, а также параметры сервера Graylog (host и port).
Пример:
logging:
config: "classpath:logback-udp.xml" # Путь к конфигурации отправки логов на сервер
graylog:
host: localhost # Graylog host
port: 12201 # Graylog port
Настройка формата сообщений
Для изменения формата лог-сообщений используется блок pattern c типом вывода и форматом сообщения:
-
Пример изменения формата сообщений при выводе на консоль:
logging: pattern: console: "%d [%thread] %-5level %-50logger{40} - %msg%n" -
Пример изменения формата сообщений при записи в файл:
logging: pattern: file: "%d [%thread] %-5level %-50logger{40} - %msg%n"