21 января 2020 г. 3:24

339

Логирование python

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

Python предоставляет замечательную встроенную библиотеку logging для системного логирования.

Существуют 5 уровней логирования:

  • DEBUG
  • INFO
  • WARNING
  • ERROR
  • CRITICAL

Давайте напишем простой скрипт , который импортирует библиотеку logging и записывает сообщения разного вида


import logging

logging.debug("Debug message")
logging.info("Ingo Message")
logging.warning("Warning Message")
logging.error("Error Message")
logging.critical("Critical message")

При запуске скрипта имеем следующий вывод


WARNING:root:Warning Message
ERROR:root:Error Message
CRITICAL:root:Critical message

Как мы видим логи вывелись на консоль , но при этом сообщения уровня DEBUG и INFO не вывелись , так по умолчанию выводятся все сообщения выше уровня WARNING и включительно. Чтобы в консоль выводились и сообщения уровня DEBUG и INFO. Для этого мы будем использовать функцию basicConfig() и в качестве значения доя параметра level укажем logging.DEBUG


import logging

logging.basicConfig(level=logging.DEBUG)

logging.debug("Debug message")
logging.info("Ingo Message")
logging.warning("Warning Message")
logging.error("Error Message")
logging.critical("Critical message")

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


DEBUG:root:Debug message
INFO:root:Ingo Message
WARNING:root:Warning Message
ERROR:root:Error Message
CRITICAL:root:Critical message

Как мы видим вывод осуществляется в консоль , но мы можем записывать сообщения и в файл. Для этого мы в функции basicConfig должны указать filename. Также мы можем в данной функции и указать режим filemode, если хотим перезаписывать содержимое файла при каждом запуске программы. По умаолчании filemode= 'a'.


import logging

logging.basicConfig(filename="test.log", level=logging.DEBUG)
logging.debug("Debug message")
logging.info("Ingo Message")
logging.warning("Warning Message")
logging.error("Error Message")
logging.critical("Critical message")

Теперь при запуске скрипта все сообщения будут записываться в файл test.log

comments powered by Disqus