ОСНОВНОЕ

WORDPRESS

Операционные системы

Базы данных

Фреймворк Bootstrap

Нет вернее средства разжечь в другом страсть, чем самому хранить холод (Ф. Ларошфуко).

Как использовать Logging в Python 3

FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

Статья опубликована: 12 мая 2017

Как использовать Logging в Python 3

Введение

Модуль Logging является частью стандартной библиотеки в Python и обеспечивает отслеживание событий, которые происходят во время работы программы. Вы можете добавить протоколирование вызовов в коде, чтобы указать, какие события произошли.

Модуль Logging позволяет вести журнал диагностики, который регистрирует события, связанные с работой приложений, а также ведение журнала аудита, который регистрирует события операций пользователя для анализа. Особенно используется для записи событий в файл.

Зачем использовать модуль logging

Модуль Loggingхранит записи о событиях, которые происходят в рамках программы, что позволяет увидеть результат, связанный с каким – либо из событием, которое происходит во время выполнения части программного обеспечения.

Вы можете знакомы с проверкой, когда события происходят с помощью заявления print() на протяжении всего кода. Заявление print() обеспечивает основной способ отладки кода для решения проблем. В то время как вложения заявления print() по всему коду может отслеживать поток выполнения и текущее состояние программы, это решение оказывается хуже, чем при использовании модуля Logging по нескольким причинам:

  • Становится трудно отличить вывод отладки и нормальный вывод программы, так как оба смешиваются
  • При использовании заявления print(), рассеянных по всему коду, не существует простой способ отключить те, которые обеспечивают отладку
  • Становится трудно удалить все заявления print(), когда вы закончите с отладкой
  • Там нет записей журнала, который содержит легко доступную диагностическую информацию

Это хорошая идея, получить в привычку использовать модуль logging в коде, так как это больше подходит для приложений, прорастающих за пределы простых скриптов Python и обеспечивает устойчивый подход к отладке.

Поскольку журналы могут показать вам поведение и ошибки в течение долгого времени, они могут дать вам более полную картину того, что происходит в процессе разработки приложений.

Печать отладочных сообщений в консоли

Если вы привыкли использовать заявление print(), чтобы увидеть, что происходит в программе, вы может привыкли видеть программу, которая определяет класс и инициализирует объекты, которые выглядят примерно так:

pizza.py
 

Выше код использует метод __init__ для определения name и объект price из класса Pizza. Далее он использует два метода, один называется make() для приготовления пиццы, а также один называется eat() для употребления пиццы. Эти два метода принимают в параметре quantity, который инициализируется как 1.

Теперь давайте запустим программу:

 

Получим следующий результат:

Вывод
 

В то время как заявление print() позволяет нам видеть, как работает код, мы можем использовать модуль logging вместо него.

Давайте удалим или закомментируйте заявление print() в коде, и добавим import logging в начало файла:

pizza.py
 

Модуль logging имеет уровень WARNING по умолчанию, который является уровнем выше DEBUG. Так как мы будем использовать Модуль logging для отладки в данном примере, нам нужно изменить конфигурацию таким образом, чтобы был уровень logging был DEBUG, который будет возвращать информацию на консоль для нас. Мы можем сделать это, добавив следующую строку ниже оператора импорта:

pizza.py
 

Уровень logging.DEBUG относится к постоянному целочисленному значению, мы ссылаемся в коде выше, чтобы установить порог. Уровень DEBUG10.

Теперь мы заменим все заявления print() на заявление logging.debug(). В отличие от константы logging.DEBUG которое является постоянным, logging.debug() является методом модуля logging. При работе с этим методом, мы можем использовать ту же строку, которая передается в print(), как показано ниже.

pizza.py
 

В этот момент, когда мы запускаем программу командой python pizza.py, мы получим следующий результат:

Вывод
 

Сообщения журнала имеют уровень серьезности DEBUG, а также слова root встроенные в них, которое относится к уровню модуля Python. Модуль logging может быть использован с иерархией loggers, которое имеют разные названия, так что вы можете использовать другой регистратор для каждого из модулей.

Например, вы можете установить регистратор равный регистраторам, которые имеют разные названия и другой вывод:

 

Вывод
 

Теперь, когда у нас есть понимание того, как использовать Модуль logging для печати сообщений на консоль, давайте перейдем к использованию модуля logging для вывода сообщений в файл.

Протоколирование сообщений в файл

Основная цель модуля logging состоит в выводе сообщений в файл, а не на консоль. Сохранение файла сообщений предоставляет данные в течение долгого времени, который вы можете оценить, так что вы можете увидеть, какие изменения были сделаны в вашем коде.

Для того, чтобы начать запись в файл, мы можем изменить logging.basicConfig() включив параметр filename. В этом случае, давайте назовем имя файла test.log:

pizza.py
 

Код выше такой же, как это было в предыдущем разделе, за исключением того, что теперь мы добавили имя файла журнала для печати. После того, как мы запустим код с командой python pizza.py, мы должны увидеть новый файл в нашем каталоге, который называется test.log.

Давайте откроем файл test.log с nano (или текстовым редактором по вашему выбору):

 

Когда файл откроется, мы увидим следующее:

test.log
 

Это похоже на вывод консоли, с которым мы столкнулись в предыдущем разделе, только теперь он находится в файле test.log.

Давайте закроем файл с CTRL+ x и перейдем обратно в файл pizza.py, так что мы можем изменить код.

Мы изменим параметры в двух случаях пиццы, pizza_01 и pizza_02:

pizza.py
 

С учетом этих изменений, давайте запустим программу снова с командой python pizza.py.

После того как программа запустилась, мы можем открыть наш файл test.log снова с nano\:

 

Когда мы посмотрим в файл, мы увидим, что были добавлены несколько новых линии, и что предыдущие строки из последнего времени, были сохранены:

test.log
 

Хотя эта информация, безусловно, полезна, мы можем сделать журнал более информативным, добавив дополнительные атрибуты LogRecord. В первую очередь, мы хотели бы добавить удобочитаемый штамп времени, который говорит нам, когда LogRecord была создана.

Мы можем добавить атрибут параметра называемый format, ссылаться на него, как показано в таблице со строкой %(asctime)s. Кроме того, чтобы сохранить уровень DEBUG, нам нужно включить строку %(levelname)s и сохранить сообщение строки, которое зададим в logger распечатать %(message)s. Каждый из этих атрибутов будет разделен colon, как показано в коде добавленного ниже.

pizza.py
 

Когда мы запустим код выше с дополнительными атрибутами с командой python pizza.py, мы получим новые линии добавленные в наш файл test.log, который включает читаемую метку времени в дополнении к имени уровня DEBUG и связанным с ними сообщениями, которые передаются в регистратор как строки.

 

В зависимости от ваших потребностей, вы можете использовать дополнительные атрибуты LogRecord в коде.

Ведение журнала отладки и других сообщений в виде отдельных файлов предоставляет вам целостного понимания вашей программы на Python с течением времени, что дает вам возможность устранять неполадки и изменять свой код.

Таблица уровней в Logging

Как разработчик, вы можете приписывать уровень важности в случае, захватывается в регистраторе, добавив уровень серьезности. Уровни серьезности приведены в таблице ниже.

Уровни регистрации технически целые числа (константы), и все они с шагом 10, начиная с NOTSET которое инициализирует регистратор в числовом значении 0.

Вы также можете определить свои собственные уровни относительно предопределенных уровней. Если определить уровень с тем же числовым значением, вы можете перезаписать имя, связанное с этим значением.

В приведенной ниже таблице показаны различные имена уровней, их числовые значения, какую функцию можно использовать для вызова уровня, и то, для чего этот уровень используется.

уровеньЧисловое значениефункцияИспользовал к
CRITICAL50logging.critical()Показать серьезную ошибку, программа может быть не в состоянии продолжать работать
ERROR40logging.error()Показать более серьезные проблемы
WARNING30logging.warning()Укажите, что-то случилось неожиданное, или может произойти
INFO20logging.info()Убедитесь, что все работает, как ожидалось
DEBUG10logging.debug()Диагностика проблем, показать подробную информацию

 

Модуль logging устанавливает уровень по умолчанию на WARNING, так WARNING, ERROR и CRITICAL все будут регистрироваться по умолчанию. В приведенном выше примере, мы изменили конфигурацию, чтобы включать в себя уровень DEBUG со следующим кодом:

 

Вы можете прочитать больше о командах и работе с отладчиком из официальной документации по модулю logging.

Вывод

Отладка является важным шагом любого проекта разработки программного обеспечения. Модуль logging является частью стандартной библиотеки Python, обеспечивает отслеживание событий, которые происходят в то время как программа работает, и может выводить эти события в отдельный файл журнала, чтобы позволить Вам отслеживать то, что происходит в то время как ваш код работает. Это дает вам возможность отладки кода, основанного на понимании различных событий, которые происходят с запуском программы с течением времени.


Читайте также

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Простая логическая игра "Поймай кота". Задача игры окружить кота точками так, чтобы он не смог убежать с поля. Постигла неудача - начни игру снова!

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close