Логирование с Logging в Python

Логирование работы кода одна из часто возникающих задач при написании многих скриптов. В Python для этого есть очень мощная библиотека Logging, но её корректная настройка требует опыта. Например, я привык к формату логов веб серверов — когда в файл пишется вместе с сообщением время события, некоторая служебная информация, а так же в отдельный файл пишутся только ошибки, плюс есть ротация логов.

В сети по использованию Logging примеров достаточно, но чтобы в итоге лог соответствовали моим требованиям, пришлось хорошенько погуглить, поэтому итоговым результатом решил поделиться.

У меня получился следующий код настройки логов:

Опыт разработки на Python у меня пока небольшой, в основном пишу на PHP, поэтому вывод логов обернул еще в две функции  — echo и echo_error:

Но у этой обертки есть минус — номер строки lineno в log_formatter всегда указывает на вызов в самой функции echo (т.е. всегда одинаковый), а не на строку вызова функции. К тому же от этих кривоватых оберток можно вообще избавиться, добавив дополнительные хандлеры к объекту app_log — хандлер вывода в консоль и хандлер отправки письма на почту — в Logging они есть.

Так SMTPHandler позволяет отправить письмо по SMTP, но мне нужна была поддержка SSL и показалось проще/быстрее отправить письмо через SMTPlib. Об этом написал в предыдущем посте. Возможно позже  сделаю эти доработки.

Если Вам такие сложности не нужны, и достаточно ведения простого лог файла, можно использовать такой код:

Источники:
Официальная документация: https://docs.python.org/2/library/logging.html  и https://docs.python.org/2/library/logging.handlers.html
Небольшой пример с хабра, с которого взял пример форматирования: https://habrahabr.ru/post/144566/
Хороший пример с кучей различных настроек: https://fangpenlin.com/posts/2012/08/26/good-logging-practice-in-python/

Вам может также понравиться...