Настройка логирования
Данный раздел описывает возможности настройки логирования в приложении. Логирование настраивается при помощи конфигов в формате json.
Настройки логирования называются профиль логирования.
Количество профилей логирования не ограничено.
Активный профиль логирования имеет значение флага active_flg=True.
Форматтер - определяет правила форматирования текстовых и json логов. Количество конфигураций форматтеров не ограничено.
Хендлер - определяет куда будет отправлен лог - в консоль (stdout) и/или в файл.
Логгер - позволяет определить уровень
логирования (INFO | DEBUG etc.) и хендлер для компонента приложения.
Если компонент в явном виде не определен в списке логгеров, то будет использован логгер root.
Для отключения хендлера логов компонента необходимо указать "handlers": [].
В таком случае логов от компонента не будет.
JSON-конфиг
Пример конфигурации:
{
"version": 1,
"disable_existing_loggers": false,
"formatters": {
"text": {
"()": "axiom.log_formatters.TextFormatter",
"len_limit": -1
},
"text_limited": {
"()": "axiom.log_formatters.TextFormatter",
"len_limit": 16000
},
"json": {
"()": "axiom.log_formatters.JSONFormatter",
"fmt_keys": {},
"len_limit": -1
},
"json_limited": {
"()": "axiom.log_formatters.JSONFormatter",
"fmt_keys": {},
"len_limit": 16000
},
"json_full": {
"()": "axiom.log_formatters.JSONFormatter",
"fmt_keys": {},
"len_limit": -1,
"builtin_flds": true
}
},
"handlers": {
"stdout": {
"class": "logging.StreamHandler",
"level": "DEBUG",
"formatter": "json_limited",
"stream": "ext://sys.stdout"
},
"file": {
"class": "logging.handlers.TimedRotatingFileHandler",
"level": "DEBUG",
"formatter": "json_full",
"filename": "./axiom.log",
"when": "midnight",
"backupCount": 30
}
},
"loggers": {
"root": {
"level": "DEBUG",
"handlers": ["stdout", "file"]
},
"sqlalchemy": {
"handlers": []
},
"sqlalchemy.engine": {
"level": "INFO"
},
"fastapi": {
"handlers": []
},
"uvicorn": {
"handlers": []
},
"boto3": {
"level": "ERROR",
"handlers": []
},
"botocore": {
"level": "ERROR",
"handlers": []
},
"urllib3": {
"level": "ERROR",
"handlers": []
},
"httpx": {
"level": "ERROR",
"handlers": []
},
"requests": {
"level": "ERROR",
"handlers": []
},
"sentry_sdk": {
"level": "ERROR",
"handlers": []
}
}
}
Параметры, указанные в конфигурации:
version- Обязательный параметр с неизменяемым значением 1disable_existing_loggers- отключение существующих логгеров, не входящих в конфигурацию (по умолчанию false)formatters- Список форматтеров логгераtext_*- Преднастроенный форматтер для вывода лога в текстовом формате, возможные параметры:()- Класс форматтера, преднастроенный из axiomaxiom.log_formatters.TextFormatterlen_limit- Ограничение длины лога
json_*- Преднастроенный форматтер для вывода лога в формате json, возможные параметры:()- Класс форматтера, преднастроенный из axiomaxiom.log_formatters.JSONFormatterfmt_keys- json с переименованием имен полей в логеlen_limit- Ограничение длины логаbuiltin_flds- Вывод всех возможных полей лога (нужно для самого расширенного логирования)
handlers- Список хэндлеров логгераstdout- Вывод лога в stdout, параметры:class- Класс хэндлера (по умолчанию встроенныйlogging.StreamHandler, подробнее см. документацию)level- Уровень логированияformatter- Форматтер из секцииformattersstream- Выбор стрима (по умолчаниюext://sys.stdout)
file- Вывод лога в файл, параметры:class- Класс хэндлера (по умолчанию встроенныйlogging.handlers.TimedRotatingFileHandler)level- Уровень логированияformatter- Форматтер из секцииformattersfilename- Абсолютный путь до файла с логомwhen- Когда осуществлять закрытие файла и открытие нового (по умолчаниюmidnight, подробнее о формате см. документацию)backupCount- Количество файлов с логами (по умолчанию 30)
loggers- Список логгеровroot- Основной логгер, где производится вся настройка, параметры:level- Уровень логированияhandlers- Список хэндлеров из секцииhandlers
sqlalchemy.engine- Логгер sqlalchemy, отвечает за вывод выполняемых запросов в логlevel- Уровень логирования. Для вывода основных запросов указатьINFO.
*- Все остальные логгерыhandlers- необходимо каждому из логгеров значение[], чтобы отключить встроенные хэндлеры.
Настройка API
В API существуют преднастроенные профили логирования для всех 5-ти уровней
(DEBUG, INFO, WARNING, ERROR, CRITICAL).
Чтобы посмотреть все существующие конфигурации, необходимо вызвать метод /sys/logging_profiles.
Чтобы обновить конфигурацию, необходимо вызвать метод /sys/logging_profiles/{name}
передав имя профиля и json-конфиг, в формате, описанном выше.
Отправка логов в fluent через UDP-plugin
Для подключения к fluent в конфигурацию необходимо добавить новый handler и подключить его к
желаемым логгерам.
{
...
"handlers": {
"fluent": {
"class": "fluent.handler.FluentHandler",
"host": "localhost",
"port": 24224,
"tag": "test.logging",
"formatter": "json_full",
"level": "DEBUG"
},
...
},
"loggers": {
"root": {
"level": "DEBUG",
"handlers": ["stdout", "file", "fluent"]
},
...
},
...
}