Логирование в 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