Если Вы хотя бы немного знакомы с программированием и пробовали запускать что-то «в продакшен», то вам наверняка станет больно от такого диалога:
Логирование — крайне важная штука в программировании.
В языке Python основным инструментом для логирования является библиотека logging. Так давайте вместе с IT Resume рассмотрим её подробней.
import logging
Основная функция, которая пригодится Вам для работы с этим модулем — basicConfig(). В ней Вы будете указывать все основные настройки (по крайней мере, на базовом уровне).
У функции basicConfig() 3 основных параметра:
Соответственно, чтобы не засорять логи лишней информацией, в basicConfig() Вы можете указать минимальный уровень фиксируемых событий.
https://tproger.ru/jobs/devops-engineer-integration-computer-vision-intel/?utm_source=in_text
По умолчанию фиксируются только предупреждения (WARNINGS) и события с более высоким приоритетом: ошибки (ERRORS) и критические ошибки (CRITICALS).
Уровни логирования
Если Вы хотите посмотреть все сообщения, необходимо передать соответствующий уровень ошибок:
logging.basicConfig(level=logging.DEBUG)
А далее, чтобы записать информационное сообщение (или вывести его в консоль, об этом поговорим чуть позже), достаточно написать такой код:
logging.debug('debug message')
logging.info('info message')
И так далее. Теперь давайте обсудим, куда наши сообщения попадают.
Другими словами, если Вы просто выполните такой код:
import logging
logging.error('WOW')
То сообщение WOW придёт Вам в консоль. Понятно, что в консоли никому эти сообщения не нужны. Как же тогда направить запись лога в файл? Очень просто:
logging.basicConfig(filename = "mylog.log")
Ок, с записью в файл и выбором уровня логирования все более-менее понятно. А как настроить свой шаблон? Разберёмся.
Кстати, мы собрали для Вас сублимированную шпаргалку по логированию на Python в виде карточек. У нас ещё много полезностей, не пожалеете
Сделать это можно, как все уже догадались, с помощью параметра format.
Например, если внутри basicConfig указать:
format = "%(asctime)s - %(levelname)s - %(funcName)s: %(lineno)d - %(message)s"
То вывод ошибки будет выглядеть так:
2019-01-16 10:35:12,468 - ERROR - <module>:1 - Hello, world!
Вы можете сами выбирать, какую информацию включить в лог, а какую оставить. По умолчанию формат такой:
<УРОВЕНЬ>: <ИМЯ_ЛОГГЕРА>: <СООБЩЕНИЕ>.
Важно помнить, что все параметры logging.basicConfig должны передаваться до первого вызова функций логирования.
Вместо заключения просто оставим здесь рабочий кусочек кода, который можно использовать
import logging
logging.basicConfig(
level=logging.DEBUG,
filename = "mylog.log",
format = "%(asctime)s - %(module)s - %(levelname)s - %(funcName)s: %(lineno)d - %(message)s",
datefmt='%H:%M:%S',
)
logging.info('Hello')
Если хотите разобраться с параметрами более подробно, Вам поможет официальная документация (очень неплохая, кстати).
Источник статьи: https://tproger.ru/articles/shpargalka-po-logirovaniju-na-python/
Да, у Василия, судя по всему, не настроено логирование. И это ужасно, хотя бы по нескольким причинам:— Вась, у нас там приложение слегло. Посмотри, что случилось?
— Эмм… А как я это сделаю?..
- Он никогда не узнает, из-за чего его приложение упало.
- Он не сможет отследить, что привело к ошибке (даже если приложение не упало).
- Он не сможет посмотреть состояние своей системы в момент времени N.
- Он не сможет профилактически поглядывать в логи, чтобы следить за работоспособностью приложения.
- Он не сможет хвастаться своим… (кхе-кхе).
Логирование — крайне важная штука в программировании.
В языке Python основным инструментом для логирования является библиотека logging. Так давайте вместе с IT Resume рассмотрим её подробней.
Что такое logging?
Модуль logging в Python — это набор функций и классов, которые позволяют регистрировать события, происходящие во время работы кода. Этот модуль входит в стандартную библиотеку, поэтому для его использования достаточно написать лишь одну строку:import logging
Основная функция, которая пригодится Вам для работы с этим модулем — basicConfig(). В ней Вы будете указывать все основные настройки (по крайней мере, на базовом уровне).
У функции basicConfig() 3 основных параметра:
- level — уровень логирования на Python;
- filename — место, куда мы направляем логи;
- format — вид, в котором мы сохраняем результат.
Уровни логирования на Python
Наверно, всем очевидно, что события, которые генерирует наш код кардинально могут отличаться между собой по степени важности. Одно дело отлавливать критические ошибки (FatalError), а другое — информационные сообщения (например, момент логина пользователя на сайте).Соответственно, чтобы не засорять логи лишней информацией, в basicConfig() Вы можете указать минимальный уровень фиксируемых событий.
https://tproger.ru/jobs/devops-engineer-integration-computer-vision-intel/?utm_source=in_text
По умолчанию фиксируются только предупреждения (WARNINGS) и события с более высоким приоритетом: ошибки (ERRORS) и критические ошибки (CRITICALS).
Уровни логирования
Если Вы хотите посмотреть все сообщения, необходимо передать соответствующий уровень ошибок:
logging.basicConfig(level=logging.DEBUG)
А далее, чтобы записать информационное сообщение (или вывести его в консоль, об этом поговорим чуть позже), достаточно написать такой код:
logging.debug('debug message')
logging.info('info message')
И так далее. Теперь давайте обсудим, куда наши сообщения попадают.
Отображение лога и запись в файл
За место, в которое попадают логи, отвечает параметр filename в basicConfig. По умолчанию все Ваши логи будут улетать в консоль.Другими словами, если Вы просто выполните такой код:
import logging
logging.error('WOW')
То сообщение WOW придёт Вам в консоль. Понятно, что в консоли никому эти сообщения не нужны. Как же тогда направить запись лога в файл? Очень просто:
logging.basicConfig(filename = "mylog.log")
Ок, с записью в файл и выбором уровня логирования все более-менее понятно. А как настроить свой шаблон? Разберёмся.
Кстати, мы собрали для Вас сублимированную шпаргалку по логированию на Python в виде карточек. У нас ещё много полезностей, не пожалеете
Форматирование лога
Итак, последнее, с чем нам нужно разобраться — форматирование лога. Эта опция позволяет Вам дополнять лог полезной информацией — датой, названием файла с ошибкой, номером строки, названием метода и так далее.Сделать это можно, как все уже догадались, с помощью параметра format.
Например, если внутри basicConfig указать:
format = "%(asctime)s - %(levelname)s - %(funcName)s: %(lineno)d - %(message)s"
То вывод ошибки будет выглядеть так:
2019-01-16 10:35:12,468 - ERROR - <module>:1 - Hello, world!
Вы можете сами выбирать, какую информацию включить в лог, а какую оставить. По умолчанию формат такой:
<УРОВЕНЬ>: <ИМЯ_ЛОГГЕРА>: <СООБЩЕНИЕ>.
Важно помнить, что все параметры logging.basicConfig должны передаваться до первого вызова функций логирования.
Эпилог
Что же, мы разобрали все основные параметры модуля logging и функции basicConfig, которые позволят Вам настроить базовое логирование в Вашем проекте. Дальше — только практика и набивание шишекВместо заключения просто оставим здесь рабочий кусочек кода, который можно использовать
import logging
logging.basicConfig(
level=logging.DEBUG,
filename = "mylog.log",
format = "%(asctime)s - %(module)s - %(levelname)s - %(funcName)s: %(lineno)d - %(message)s",
datefmt='%H:%M:%S',
)
logging.info('Hello')
Если хотите разобраться с параметрами более подробно, Вам поможет официальная документация (очень неплохая, кстати).
Источник статьи: https://tproger.ru/articles/shpargalka-po-logirovaniju-na-python/