Pull to refresh

Мелкая питонячая радость #1: loguru

Reading time 2 min
Views 35K

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

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+19
Comments 9
Comments Comments 9

Articles