CoderCastrov logo
CoderCastrov
Питон

Организуйтесь с помощью Python logging...

Организуйтесь с помощью Python logging...
просмотров
2 мин чтение
#Питон

Привет всем - если вы пропустили мою первую статью о том, как начать работу с Python logging легким путем, пожалуйста, перейдите туда сейчас и прочитайте ее. Эта статья основана на этом введении и показывает, как вы можете автоматически создавать файл журнала для каждого модуля, класса или экземпляра класса с минимальными усилиями. Это отлично подходит для организации более мелких, более фокусированных журналов, а не для просмотра одного гиганта и, неизбежно, написания еще большего кода только для извлечения, разделения или организации вывода после события. Давайте настроим вас на успех с самого начала!

Простое, разумное и осмысленное логирование в Python

TLDR

medium.com


Итак... Я наконец разобрался, как сэкономить много времени и стресса с помощью ежедневной пакетной задачи, которую я запускал и которая использует более 30 классов Python (по одному для каждого парсера веб-сайта), и я просто хотел поделиться, насколько легко организовать вывод с помощью log2d:

python -m pip install log2d --upgrade

Вместо того, чтобы иметь один огромный файл журнала с (десятками) тысяч строк вывода, все перемешано, потому что я "умно" (ха-ха!) настроил парсеры на многопоточное выполнение, этот подход делит вывод на более удобные части. Вы можете настроить этот подход под свой стиль и потребности, но вот что я хотел достичь:

  • Один файл журнала (и вывод в консоль) на каждый МОДУЛЬ для сообщений о Прогрессе, например "Запуск парсера X".
  • Один файл журнала на каждый ЭКЗЕМПЛЯР парсера (Amazon.de, Amazon.co.uk, Amazon.com и т. д.) для сообщений о Повторах, например, когда страницы продуктов успешно парсятся, но не с первой попытки.
  • Один файл журнала на каждый ЭКЗЕМПЛЯР парсера (Amazon.de, Amazon.co.uk, Amazon.com и т. д.) для сообщений о Сбоях, например, после проблем с подключением, сообщений об ошибках HTTP или проблем с аутентификацией.
  • Один файл журнала на каждый КЛАСС парсера для сообщений об Ошибке, то есть фактических проблемах с моим кодом, требующих отладки.

Хотя этот подход "деления и покорения" особенно подходит для веб-парсинга, где обычно есть один класс на парсер (модель "Scrapy"), простые рецепты ниже должны помочь любому, кто хочет логировать вывод на уровне модуля, уровне класса или уровне экземпляра по любой причине, не вдаваясь в темные глубины модуля logging в Python.

Итак, без лишних слов, вот код...

Рецепт 1: Один логгер на модуль

Красочные логи с использованием VS Code

Рецепт 2: Один логгер на экземпляр

Рецепт 3: Один логгер на класс

Просто, не так ли? И даже короче набирать .log, чем print().

Вот и все, что можно сказать — три разных рецепта в зависимости от того, как вы хотите группировать свои логи, и вся сложность стандартного модуля Logging в Python дискретно скрыта от вида благодаря log2d.

Счастливого логирования!