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!
Читайте также:
- Учимся писать строки документации в Python
- Топ-10 магических команд в Python, которые повысят вашу продуктивность
- Почему Python не станет языком программирования будущего
Перевод статьи Davis David: How to Practice Logging in Python with Logzero