DevGang
Авторизоваться

Используйте 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.

Источник:

#Python #Open source
Комментарии 1
Spirit412 12.09.2020 в 10:36

Спасибо. Попробую в текущем проекте

Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

Освой перспективную онлайн профессию!

Получить скидку