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

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

Настройка логирования выполняется в файле application.yml в секции logging:

Для работы с ротацией файла с лог-сообщениями и архивацией используется библиотека logback.

Настройки по умолчанию

После установки и запуска приложения по умолчанию логи пишутся с указанными ниже параметрами (если не заданы иные значения):

logging:
  level:
    tech.inno.dsm: DEBUG
  file:
    name: /var/log/dsm.log
  logback:
    rollingpolicy:
      file-name-pattern: /var/log/dsm_%d{yyyy-MM-dd}_archive-%i.log
      max-file-size: 10MB
      total-size-cap: 1000MB
      max-history: 365

Уровень логирования

Доступные уровни:

  • 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, которая позволяет настроить политику ротации и архивацию.

Доступны для использования 2 механизма ротации логов: по времени и по размеру и времени.

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

Ротация по времени (Time Based Rolling Policy)

Политика ротации, основанная на времени, например, по дням или по месяцам.

Основным параметром конфигурации является file-name-pattern, содержит только спецификатор %d (дата).

Если file-name-pattern не содержит спецификатор %d, то возникнет ошибка при запуске приложения.

Параметры:

file-name-pattern

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

max-history

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

total-size-cap

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

Ротация по размеру и времени (Size And Time Based Rolling Policy).

Данная политика используется, когда ротация логов требуется по времени и по размеру.

Параметр file-name-pattern необходимо задавать со спецификаторами %d (дата) и %i (индекс файла ротации).

Также для данного механизма необходимо использовать параметр max-file-size.

Проверка необходимости ротации выполняется 1 раз в минуту во время очередной записи нового лог-файла. Если %d спецификатор содержит минуты или текущий размер файла больше max-file-size, то произойдет ротация. В связи с этим при постоянной записи лог-сообщений в лог-файл ротированные файлы имеют размер max-file-size.

Параметры:

file-name-pattern

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

max-file-size

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

Пример:

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

Маскирование паролей в лог-сообщениях

Для обеспечения безопасности при выводе данных УЗ в лог-сообщении пароль маскируется.

Например, при создании доверительного отношения лог-сообщение имеет вид:

Run commands: /bin/bash -c sudo samba-tool domain trust create "inno.tech" --username="user123@inno.tech" --password="***" --create-location=both --skip-validation