Логирование 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