Логирование в 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")Для простоты чтения вывод обозначается разными цветами:
Как видите, каждый уровень имеет свой цвет, что значительно упрощает его определение.
Запись логов в файл
Многие пользователи 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!

Comments