Логирование в Python с помощью Logzero


Logzero — это пакет Python, созданный Крисом Хагером, который упрощает отображение информации и сведений об отладке в качестве оператора print в Python 2 и 3.

В Logzero есть различные функции, которые облегчают его использование в проектах Python. К ним относятся:

  • Простота регистрации в консоли и/или файле.
  • Полностью настроенный стандартный логгер Python.
  • Приятное форматирование, включающее специфичные для уровня цвета в консоли.
  • Работа со всеми видами кодировок символов и специальными символами.
  • Совместимость с Python 2 и 3.
  • Отсутствие необходимости в зависимостях Python.

Установка

Чтобы установить logzero с помощью pip, выполните следующий код:

pip install -U logzero

Установку также можно выполнить из публичного репозитория Github:

git clone https://github.com/metachris/logzero.git cd logzero python setup.py install

Базовый пример

Импортируем логгер из logzero в файл python и попробуем 4 примера уровней логирования:

# Импорт логгера из logzero from logzero import logger logger.debug("hello") logger.info("info") logger.warning("warning") logger.error("error")

Для простоты чтения вывод обозначается разными цветами:

Вывод logzero

Как видите, каждый уровень имеет свой цвет, что значительно упрощает его определение.

Запись логов в файл

Многие пользователи Python предпочитают записывать логи в файл. При запуске системы их можно просматривать для проверки ошибок и обслуживания. Вы также можете установить файл для сохранения всех лог-записей в legzero.

Мы импортируем логгер и лог-файл из logezero. Метод logfile используется, чтобы настроить лог-файл для сохранения хранящихся в логе записей.

Теперь лог-записи будут сохранены в файле с именем my_logfile.log:

# Импорт логгера и лог-файла from logzero import logger, logfile # Установка пути к лог-файлу logfile('my_logfile.log') # Лог-сообщения logger.info("This log message saved in the log file")

Вывод в my_logfile.log содержит метку уровня логирования (информационный уровень помечен как «I»), дату, время, имя файла python, номер строки и само сообщение:

[I 200409 23:49:59 demo:8] This log message saved in the log file

Ротация лог-файла

Не стоит сохранять все записи в один лог-файл, поскольку он становится массивным и увеличивает нагрузку на систему.

Вы можете использовать параметры maxBytes и backupCount для ротации файла с заранее заданным размером. Когда размер будет превышен, файл закроется, а новый файл для вывода откроется автоматически. Переключение происходит каждый раз, когда длина текущего лог-файла составляет почти maxBytes. Если maxBytes или backupCount равен нулю, переключение не происходит.

В приведенном ниже примере мы установили maxBytes равным 1000000 байтов (1 МБ). Следовательно, когда размер превышает 1 МБ, файл закрывается и открывается новый файл для сохранения лог-записей. Количество сохраняемых резервных копий равно трем.

# Установка ротирующегося лог-файла logzero.logfile("my_logfile.log", maxBytes=1000000, backupCount=3)

Установка минимального уровня логирования

Установка уровня логирования предполагает выбор степени важности данного лог-сообщения. Изменить уровень логирования для обработчика файла можно с помощью аргумента loglevel в методе logfile.

В приведенном ниже примере мы установили loglevel как warning. Следовательно все лог-записи ниже уровня warning не будут сохранены в лог-файл.

# Импорт пакета logzero from logzero import logger, logfile import logging # Вы также можете установить другой уровень логирования для обработчика файла logfile("my_logfile.log", loglevel=logging.WARNING) # Лог-сообщения logger.info("This log message saved in the log file") logger.warning("This log message saved in the log file")

Установка пользовательского форматирования

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

В приведенном ниже примере показано, как настроить формат лог-записей.

# Импорт пакета logzero import logzero from logzero import logger, logfile import logging # Установка пути к файлу logfile("my_logfile.log") # Установка пользовательского форматирования my_formatter = logging.Formatter('%(filename)s - %(asctime)s - %(levelname)s: %(message)s'); logzero.formatter(my_formatter) # Лог-сообщения logger.info("This log message saved in the log file") logger.warning("This log message saved in the log file")

В приведенном выше примере мы настроили формат логирования, включив имя файла, дату, время, имя уровня логирования и сообщение.

Так выглядит вывод в my_logfile.log:

demo.py - 2020–04–10 00:51:44,706 - INFO: This log message saved in the log file demo.py - 2020–04–10 00:51:44,707 - WARNING: This log message saved in the log file

Экземпляры пользовательских логгеров

Вместо использования логгера по умолчанию, можно настроить экземпляры логгера с помощью logzero.setup_logger(..). Он возвращает полностью настроенный экземпляр логгера с различными параметрами, такими как имя, имя лог-файла, форматирование, maxBytes, backupCount и уровень логирования.

Рабочий пример того, как настроить логирование с помощью пользовательского экземпляра логгера:

import logzero package from logzero import logger, logfile, setup_logger import logging # Установка пользовательского форматирования my_formatter = logging.Formatter('%(filename)s - %(asctime)s - %(levelname)s: %(message)s'); # Создание пользовательского экземпляра логгера custom_logger = setup_logger( name="My Custom Logger", logfile="my_logfile.log", formatter=my_formatter, maxBytes=1000000, backupCount=3,level=logging.INFO) # Лог-сообщения custom_logger.info("This log message saved in the log file") custom_logger.warning("This log message saved in the log file")

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

Заключение

Мы познакомились с основами и рассмотрели некоторые примеры использования пакета Python Logezero. Узнать больше о его функциях можно в документации. Теперь вы сможете реализовать пакет logzero в вашем следующем проекте Python!


Перевод статьи Davis David: How to Practice Logging in Python with Logzero


Поделиться статьей:


Вернуться к статьям

Комментарии

    Ничего не найдено.