Логирование в Admin Backend
Основная информация
Логирование — это фиксация и структурирование информации о работе Admin Backend в логах с возможностью быстрого анализа и аудита.
Начиная с версии 10.8, в Admin Backend поддерживается чтение базовой конфигурации логгера из файла logging.json в корне приложения, а также подключение дополнительного внешнего файла конфигурации через аргумент запуска --logging-config.
Важно
Для Chat Backend и Admin Backend используются разные файлы конфигурации. Не указывайте один и тот же путь для обоих приложений.
Конфигурация по умолчанию
При старте Admin Backend выполняются следующие шаги:
-
Загружается конфигурация из файла
logging.json, расположенного в корне приложения Admin Backend.. -
Если указан аргумент
--logging-config="<путь к файлу>", то настройки из указанного файла сливаются с базовой конфигурацией. -
В логах на старте выводится служебная запись о применении конфигурации логирования.
Базовая конфигурация может содержать форматтеры, обработчики, логгеры и настройки корневого логгера. Пример минимальной конфигурации по умолчанию (текстовый формат вывода в stderr):
{
"version": 1,
"formatters": {
"default_text": {
"style": "{",
"format": "[{levelname[0]} {asctime} {module}:{lineno}] {message}",
"datefmt": "%y%m%d %H:%M:%S %z"
}
},
"handlers": {
"stderr": {
"class": "logging.StreamHandler",
"formatter": "default_text",
"stream": "ext://sys.stderr"
}
},
"root": {
"handlers": ["stderr"],
"level": "WARNING"
},
"loggers": {
"webim": { "level": "INFO" }
}
}
Внешний файл конфигурации (--logging-config)
Чтобы дополнить или переопределить базовую конфигурацию, передайте путь к дополнительному файлу:
python main.py --logging-config=/opt/webim/admin_backend/admin_backend_logging.json
Как работает слияние конфигураций
-
Исходной точкой служит
logging.jsonиз корня приложения Admin Backend. -
Файл из
--logging-configприменяется поверх: -
словари объединяются по ключам (значения из внешнего файла имеют приоритет);
-
скалярные значения и строки полностью перекрывают базовые;
-
списки трактуются как целиком заданные внешним файлом (замена списка), если одноименный ключ присутствует во внешнем файле.
Это означает, что если во внешнем файле вы укажете, например, root.handlers, то список обработчиков у корневого логгера будет заменен указанным. Если требуется сохранить базовые обработчики и добавить новые, явно перечислите их все во внешнем файле.
Пример:
Ниже — готовый вариант admin_backend_logging.json (его можно указать в --logging-config):
{
"version": 1,
"formatters": {
"json": {
"()": "pythonjsonlogger.jsonlogger.JsonFormatter",
"format": "[%(levelname)s[0] %(asctime) %(module)s:%(lineno)s] %(message)s",
"datefmt": "%y%m%d %H:%M:%S %z"
}
},
"handlers": {
"json": {
"class": "logging.StreamHandler",
"formatter": "json"
}
},
"root": {
"level": "DEBUG",
"handlers": ["json"]
}
}
После применения конфигурации все записи корневого логгера и дочерних логгеров будут выводиться в JSON. Убедитесь, что пакет установлен (см. ниже).
Параметры запуска Admin Backend.
С версии 10.8 параметр запуска --log-level удален.
Вместо него используйте
--logging-config="<путь к файлу конфигурации логов>"
Примеры
Простой запуск с базовой конфигурацией из logging.json в корне Admin Backend.:
python main.py
Запуск с добавлением JSON-форматирования:
python main.py --logging-config=/opt/webim/admin_backend/admin_backend_logging.json
Обработчики и ротация логов
Нужное направление вывода настраивается обработчиками (handlers) в конфиге:
- StreamHandler — вывод в stdout/stderr.
- FileHandler — запись в файл.
- RotatingFileHandler — ротация по размеру.
- TimedRotatingFileHandler — ротация по времени.
- SysLogHandler — вывод в systemd/journald через
/dev/log.
Примеры фрагментов:
Вывод в файл:
{
"handlers": {
"file_handler": {
"class": "logging.FileHandler",
"formatter": "default_text",
"filename": "/var/log/admin_backend.log"
}
},
"root": {
"handlers": ["file_handler"],
"level": "INFO"
}
}
Ротация по размеру:
{
"handlers": {
"rotating_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"formatter": "default_text",
"filename": "/var/log/admin_backend.log",
"maxBytes": 10485760,
"backupCount": 5
}
},
"root": {
"handlers": ["rotating_file_handler"],
"level": "INFO"
}
}
Ротация по времени:
{
"handlers": {
"timed_rotating_file_handler": {
"class": "logging.handlers.TimedRotatingFileHandler",
"formatter": "default_text",
"filename": "/var/log/admin_backend.log",
"when": "midnight",
"interval": 1,
"backupCount": 7
}
},
"root": {
"handlers": ["timed_rotating_file_handler"],
"level": "INFO"
}
}
Уровни логирования
| Уровень | Значение | Описание |
|---|---|---|
| Debug | 10 | Этот уровень предоставляет подробную информацию, полезную только при диагностике проблем |
| Info | 20 | Выводит в логах информационные сообщения о работе сервиса, например, об отправке сообщения или запросе к внутреннему API |
| Warning | 30 | Указывает на то, что произошло что-то неожиданное или проблема может возникнуть в ближайшем будущем |
| Error | 40 | Произошла ошибка, приложение не смогло выполнить некоторую функцию |
| Fatal | 50 | Произошла серьёзная ошибка. Приложение может завершить работу или перестать функционировать корректно |
N.B.
При логировании высокого уровня будут также выводиться логи всех низлежащих уровней. Например, для уровня WARNING это будут ERROR и FATAL, для INFO - WARNING, ERROR и FATAL, и так далее.
Изменить уровень логирования сразу у нескольких логгеров возможно только путем прописывания уровня у каждого логгера отдельно.
Зависимость python-json-logger
Для использования JSON‑форматирования требуется пакет:
pip install python-json-logger
См. также
Справочник по параметрам конфигурации:
Логирование для Chat Backend → Описание параметров