Мелкая питонячая радость #1: loguru
Сегодня мы обсудим, зачем кому-то понадобилось писать замену стандартному питонячему логеру logging
и как этой штукой пользоваться.
Больновато!
Когда заходит речь о логировании в Python, на ум сразу приходит logging
.
logging
— крепкое стабильное решение, плотно вшитое в экосистему Python. Импортишь его куда надо, производишь пару манипуляций — и все, вроде как можно писать заветное logger.exception('што-то-там')
. И запись 'што-то-там'
попадет в какой-то журнал.
После этого обычно разработчики интересуются тем, куда именно попало 'што-то-там'
и что с этой записью происходит дальше. Программеры лезут в настройки логгера и начинают с помощью кучи разных опций учить его правильно распихивать записи по файлам, базам, сборщикам ошибок и другим местам возможного хранения журнальных записей.
Появляются конфиги для логгера, которые начинаются с громоздкого, но более-менее понятного:
LOGGER_CONFIG = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"simple": {
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
}
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"level": "DEBUG",
"formatter": "simple",
"stream": "ext://sys.stdout"
},
},
"root": {
"level": "INFO",
"handlers": ["console"]
}
}
Такие конфиги быстро эволюционируют в сторону чего-то гораздо более трудноперевариваемого. А нормально настроенный конфиг для logging
, с разными уровнями логирования, разными сборщиками сообщений и ротацией файлов журналов — это здоровенный кусок текста, в котором уже реально сложно копаться.
Чтобы не больно и даже приятно
Однажды пара программеров окончательно задолбалась копаться (и ошибаться) во многочисленных настроечных опциях logging
. Эти инженеры написали свой логгер, предельно простой и при этом очень мощный. Называется эта штука Loguru.
А вот и демка этой библиотеки, и она исчерпывающе показывает, как можно в пару строк понятно и просто настраивать журналирование в вашем питонячем приложении.
Почему стоит рассмотреть loguru
в качестве альтеранативы logging
?
- Простота. Про это я уже сказал выше, но скажу еще раз — грамотно настроить
loguru
проще, чемlogging
. - Понятные способы настройки ротации файлов журналов и архивации старых записей.
- Кучи батареек уже включены в коробку — цвета сообщений, форматирование, отсылка уведомлений о сбоях на почту, стеки вызовов функций вместе с краш-репортами и много других няшных приятностей.
- И, конечно же, асинхронность! Да-да, мир Python едет все дальше в сторону async/await, и этот тектонический сдвиг всего питонячего программирования явно требует асинхронных логеров.
Конечно, за все надо платить. И за использование loguru
придется платить двумя вещами:
- Либа относительно молода и могут быть неожиданности.
- Авторы обещают полную совместимость с
logging
, но вы вполне можете натолкнуться на проблемы стыковкиloguru
с библиотеками от третьи лиц дляlogging
. Например, при навешивании обработчиков для Sentry или Airbrake.
Несмотря на эти возможные сложности, loguru
стоит того, чтобы быть внимательно протестированным и заюзанным уже в вашем ближайшем проекте.