В результате Sentry записывает все события, уровень которых соответствует info и более высоким уровням, делая это в стиле «навигационной цепочки», что упрощает отслеживание ошибок. Мы уже видели, как логирование позволяет поддерживать файлы журналов для различных модулей, из которых состоит приложение. Мы, кроме того, можем конфигурировать подсистему логирования и подстраивать её под свои нужды. Даже когда уровень логирования устанавливают в значение warning, или в любое значение, которое выше warning, размеры лог-файлов способны быстро увеличиваться. Происходит это в том случае, когда в один и тот же журнал пишут данные, полученные после нескольких сеансов работы с приложением.
Для того чтобы начать работать с логированием, нужно создать объект логгера, который будет записывать сообщения. Логгер может быть настроен для вывода сообщений в консоль, файл или другие места. При настройке важно указать уровень логирования, который будет использоваться для фильтрации сообщений, а также формат сообщений, который определяет, Автоматизированное тестирование как будет выглядеть каждая строка в записи.
Когда вы будете работать над своим https://deveducation.com/ следующим Python-проектом — не забудьте реализовать в нём механизмы логирования. Изучая подробности об ошибке, вы можете увидеть, что Sentry предоставляет подробную информацию о том, где именно произошла ошибка, а так же — об аргументах x и y, работа с которыми привела к появлению исключения. Теперь, когда мы разобрались с основами логирования в Python, поговорим о сильных и слабых сторонах этого механизма.
Обработка Ошибок И Исключений В Логах
- Обратите внимание, что «root», который появлялся в предыдущих примерах,исчез.
- Есть и другие обработчики, например — StreamHandler, HTTPHandler, SMTPHandler.
- Если лог-файл становится слишком большим, то его нужно архивировать и создавать новый файл для записи.
- В этом разделе содержатся примеры простого использования модуля logging.
- При выборе уровня учитывайте контекст задачи и аудиторию, которая будет работать с логами.
Самый низкий уровень логирования — это debug (10), а самый высокий — это important (50). Обратите внимание, что «root», который появлялся в предыдущих примерах,исчез. Для того, что бы регистрировать перехваченные исключения с полной трассировкой стека, используйте функцию logging.exception().
На практике может понадобиться записывать логируемые сообщения в файл. Этот файл будет хранить данные и после того, как работа программы завершится. Если фильтрации на основе уровня логгера и/или уровня обработчиканедостаточно, экземпляры Filter могут быть добавлены к экземплярамLogger и Handler (с помощью их методаaddFilter()). Прежде чем принять решение о дальнейшей обработкесообщения, и логгеры, и обработчики обращаются ко всем своим фильтрам дляполучения разрешения. Если какой-либо фильтр возвращает ложное значение,сообщение дальше не обрабатывается.
Вы можете видеть, что подход файла конфигурации имеет несколько преимуществ посравнению с подходом Python кода, в основном разделение конфигурации и кода, а такжевозможность не программистам легко изменять свойства логгера. В этом примере также показано, как можно установить уровень журналирования,который действует как порог для отслеживания. В этом случае, поскольку мыустановили порог DEBUG, были напечатаны все сообщения. Обратите внимание, что первая строка – это сообщение, которое передается в logging.exception(), а последующие строки – трассировка полного стека, включая тип исключения, в данном случае ZeroDivisionError.
Обработчики
Они впервую очередь интересны, если вы хотите определить свои собственные уровни ихотите, чтобы они имели определенные значения относительно предопределенныхуровней. Если вы определяете уровень с тем же числовым значением, онперезаписывает предопределенное значение; предопределённое имя теряется. GetLogger() возвращает ссылку на экземпляр логгера с указаннымименем, если оно указано, или root, если нет. Имена представляют собойиерархические структуры, разделенные точками. Несколько вызововgetLogger() с одним и тем же именем вернут ссылку на один и тот же объектлоггера. Логгеры, расположенные ниже python логирование в иерархическом списке, являютсяпотомками логгеров выше в списке.
С каждымлоггером может быть связано ноль, один или несколько обработчиков (спомощью метода addHandler() из Logger). Код примера можно расширить на несколько модулей, но используя этот простой шаблон, из записей файла журнала будет не понятно из каких модулей поступали сообщения. Если необходимо отслеживать местоположение сообщений, то смотрите раздел “Продвинутое использование модуля logging”. Настройка формата сообщений в логах является важной частью логирования. Форматирование позволяет добавить полезную информацию в каждый лог, такую как время записи, уровень сообщения и сам текст сообщения.
Они инициализируются строкой формата, подходящей дляиспользования с оператором % и словарём. Чтобы получить поведение до версии 3.2, для logging.lastResort можно задатьзначение None. Для получения дополнительной информации о ведении журнала с использованиемсловаря см.
Обратите внимание, что строка формата модуля определяет форматирование сообщений для окончательного вывода в журналы и полностью противоположно тому, как строится отдельное сообщение. Например, DEBUG для отладки, WARNING для предупреждений и ERROR для ошибок. Уровень ERROR используйте для записи сообщений о сбоях, которые мешают выполнению задачи, но не останавливают работу программы целиком. Например, ошибки при обработке данных или сбои в подключении к внешним сервисам. До сих пор мы говорили о том, как логировать значения переменных и исключения, как настраивать пользовательские логгеры. Теперь же предлагаю вашему вниманию рекомендации по логированию.
Настройка Логгера
Этого должно быть достаточно, чтобы выначали работать с logging. Пакет logging предлагает гораздобольше, но чтобы извлечь из него максимум пользы, вам нужно потратить немногобольше времени на чтение следующих разделов. Если вы готовы к этому, возьмитесвой любимый напиток и продолжайте.