SFS-008 Logging (Журналирование)¶
Этот документ описывает принципы ведения лога приложения.
- Приложения пишут свой лог в
STDOUT. - Приложение стартовое сообщение со своим именем и версией сразу первой
строкой к функции main ДО всех инициализаций, аллокации памяти и установки
соединений. Например:
Staring Blockberry v1.2.3. - Приложение пишет в log момент когда оно инициализировано и готово принмать
запросы/выполнять работу:
Initialization completed. Ready to work. - Сообщение пишется в log ОДНОЙ сторокой (избегать многострочных сообщений).
- Длинна записи не должна превышать 10Kb.
- Добавлять к сообщениям
correlation_id - Делить сообщения больше 10Gb на части и искать по
correlation_id - Использовать UID между сервисами
- Ограничить поля логов только самыми необходимыми
- Избегать многострочных сообщений
- Не писать в сообщения пароли и другую чувствительную информацию
- Категорировать сообщения по уровнять (INFO, ERROR, DEBUG и тд)
- Приложение пишет в лог о своем завершени и причине см Graceful shutdown
Форматы записей в логе¶
timestamp пишется в формате ISO8601 с указанием временной зоны.
Текстовый формат¶
Текстовая строка в кодировке UTF-8. Формат:
Пример:
JSON¶
Обязательные поля:
timesatmpmessage- тестовая строка с сообщениемlevel- уровень записи
допускаются также любые другие поля.
Пример:
{"timestamp":"2024-12-12T19:31:35+00:00","message":"Starting Blockbery v1.2.3","level": "INFO", "extra":"Other info"}
Date/Timestamp¶
Допустимые значения даты/времени: https://docs.datadoghq.com/logs/log_configuration/parsing/?tab=matchers#parsing-dates
Рекомендуемый формат: yyyy-MM-dd'T'HH:mm:ss.SSSZ пример: 2016-11-29T16:21:36.431+0000
Severity/Level¶
Допустимые значения для level * https://en.wikipedia.org/wiki/Syslog#Severity_level * https://docs.datadoghq.com/logs/log_configuration/processors/?tab=ui#log-status-remapper