Сегодня мы обсудим, зачем кому-то понадобилось писать замену стандартному питонячему логеру 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 стоит того, чтобы быть внимательно протестированным и заюзанным уже в вашем ближайшем проекте.

