Логирование приложения «Менеджер службы каталогов»

Приложение позволяет гибко настраивать логирование для выявления и фиксации возможных проблем в работе.

Настройка логирования выполняется в файле 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 — уровень указывает на сообщения, описывающие ошибки или исключения. Указывают, что с приложением что-то пошло не так, и необходимо предпринять корректирующие действия;

  • OFF — логирование выключено.

Пример:

logging:
  level:
    tech.inno.dsm: TRACE

Настройка вывода

Логи приложения могут выводиться на консоль, в файл, либо отправляться напрямую на сервер.

Вывод на консоль

Вывод лог сообщений на консоль (stdout) работает по умолчанию.

Запись логов в файл

Для записи логов в файл необходимо указать в блоке file параметр name с путем до файла.

Пример:

logging:
  file:
    name:
      ${LOG_FILE:dsm.log} # путь к файлу

Политики ротации файла с лог-сообщениями

При записи лог-сообщений в файл события постоянно добавляются в конец файла. Размер лог-файла постепенно увеличивается. При применении политики ротации текущий файл с лог-сообщениями в зависимости от заданных в конфигурации условий разбивается на несколько файлов, один из которых становится архивным файлом с лог-сообщениями, во второй продолжается запись новых лог-сообщений приложения.

К архивным файлам в целях экономии места на диске может быть применено сжатие.

Библиотека logback содержит секцию rollingpolicy, которая позволяет настроить политику ротации и архивацию.

Доступные параметры:

file-name-pattern

Определяет название лог-файла и частоту ротации.

max-file-size

Максимальный размер лог-файла.

total-size-cap

Максимальный суммарный размер всех лог-файлов.

max-history

Максимальное количество лог-файлов.

Параметрами конфигурации можно задать максимальное время хранения архивных файлов, а также максимальный объем хранимых архивных файлов, по достижению которого более старые архивные файлы будут удалены.

Пример:

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. Отвечает за максимальный размер всех архивных файлов, по достижению которого более старые файлы (с меньшим индексом) будут удалены.

Автоматическое сжатие архивируемых файлов

Функция автоматического сжатия файлов включается, если значение параметра file-name-pattern заканчивается на .gz или .zip.

Отправка на сервер

В 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 типом вывода и форматом сообщения:

  1. Пример изменения формата сообщений при выводе на консоль:

    logging:
      pattern:
        console: "%d [%thread] %-5level %-50logger{40} - %msg%n"
  2. Пример изменения формата сообщений при записи в файл:

    logging:
      pattern:
        file: "%d [%thread] %-5level %-50logger{40} - %msg%n"