Используйте logzero для простого логирования в Python
Краткое руководство по удобной библиотеке журналов, которая поможет вам освоить эту важную концепцию программирования.
Библиотека logzero делает ведение логирования столь же простым, как оператор print, что является настоящим подвигом простоты. Я не уверен, взял ли Logzero свое имя, чтобы соответствовать ряду библиотек с «нулевым шаблоном», таких как pygame-zero, GPIO Zero и guizero, но он, безусловно, в этой категории. Это библиотека Python, которая делает логирование простым.
Вы можете просто использовать его базовое ведение журнала таким же образом, как вы можете использовать print
для информации и отладки, и оно имеет плавную кривую обучения в направлении более сложного ведения журнала, такого как запись в файл.
Для начала установите logzero с помощью pip:
sudo pip3 install logzero
Теперь в файле Python импортируйте logger
и попробуйте один или все эти примеры регистрации:
from logzero import logger
logger.debug("hello")
logger.info("info")
logger.warning("warning")
logger.error("error")
Вывод автоматически раскрашивается легко читаемым способом:
Так что теперь вместо использования print
, чтобы выяснить, что происходит, вместо этого используйте logger
с соответствующим уровнем журнала.
Запись логов в файл на Python
Запись в stdout
очень удобна для тестирования новой программы, но она полезна только в том случае, если вы вошли в систему на компьютере, где выполняется скрипт. Много раз, когда вы используете приложение, вам захочется выполнить код удаленно и просмотреть ошибки после выполнения. Именно для этого будет полезно сохранять логи в файл. Давай попробуем:
from logzero import logger, logfile
logfile('/home/pi/test.log')
Теперь ваши логи будут зарегистрированы в файле test.log
. Не забудьте убедиться, что у сценария есть разрешение на запись в этот файл и его структуру каталогов.
Вы также можете указать еще несколько параметров:
logfile(’/home/pi/test.log’, maxBytes=1e6, backupCount=3)
Теперь, когда файл, достигает 1 МБ (1 × 106 байт), он будет вращать записи через test.log.1, test.log.2 и так далее. Это хорошо, чтобы избежать создания массивного файла журнала, который требует интенсивного ввода-вывода для открытия и закрытия системы.
Вы также можете отправить логи в /var/log
. Предполагая, что вы работаете в Linux, сделайте своего пользователя владельцем, чтобы он мог писать в него:
sudo mkdir /var/log/test
sudo chown pi /var/log/test
Затем в вашем коде Python измените путь файла журнала:
logfile(’/var/log/test/test.log’, maxBytes=1e6, backupCount=3)
Когда дело доходит до перехвата исключений в вашем лог- файле, вы можете использовать logging.exception
:
try:
c = a / b
except Exception as e:
logger.exception(e)
Это приведет к следующему (в случае, если b
равно нулю):
[E 190422 23:41:59 test:9] division by zero
Traceback (most recent call last):
File "test.py", line 7, in
c = a / b
ZeroDivisionError: division by zero
В качестве альтернативы вы можете использовать logging.error
и скрыть трассировку:
try:
c = a / b
except Exception as e:
logger.error(f"{e.__class__.__name__}: {e}")
Теперь это даст более лаконичное сообщение:
[E 190423 00:04:16 test:9] ZeroDivisionError: division by zero
Есть еще много вариантов, которые вы можете прочитать в официальной документации logzero.readthedocs.io.