Используйте logzero для простого логирования в Python
Краткое руководство по удобной библиотеке журналов, которая поможет вам освоить эту важную концепцию программирования.
![](/static/storage/94903388682511487213280169128232544944.png)
Библиотека 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")
Вывод автоматически раскрашивается легко читаемым способом:
![](/static/storage/339926810589025614549259164325995394538.png)
Так что теперь вместо использования 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
![](/static/storage/232052144306185897372329584369913025268.png)
Есть еще много вариантов, которые вы можете прочитать в официальной документации logzero.readthedocs.io.