В любой разработке приходится рано или поздно вести логи, ведь не отдашь же заказчику программу где отладочные сообщения выводятся с помощью print, да и в дальнейшем если у заказчика что то пойдет не так то можно просто попросит показать лог и понять в чем проблема(в большинстве случаев), так вот в питоне есть очень мощная и удобная библиотека и дальше я попробую про нее рассказать.
Для начала подключим библиотеку и попробуем вывести на консоль сообщения разного типа:
#log.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import logging
# Сообщение отладочное
logging.debug( u'This is a debug message' )
# Сообщение информационное
logging.info( u'This is an info message' )
# Сообщение предупреждение
logging.warning( u'This is a warning' )
# Сообщение ошибки
logging.error( u'This is an error message' )
# Сообщение критическое
logging.critical( u'FATAL!!!' )
При выводе мы получаем:
WARNING:root:This is a warning
ERROR:root:This is an error message
CRITICAL:root:FATAL!!!
Как мы видим то при выводе мы получаем все кроме сообщений отладки и информационных, для того что бы мы могли их увидеть нужно в настройки логера передать уровень выводимых ошибок:
logging.basicConfig(level = logging.DEBUG)
Сразу хочу оговориться что конфигурационые параметры должны передаваться до первого вызова вывода ошибки, вот код:
#log.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import logging
logging.basicConfig(level = logging.DEBUG)
# Сообщение отладочное
logging.debug( u'This is a debug message' )
# Сообщение информационное
logging.info( u'This is an info message' )
# Сообщение предупреждение
logging.warning( u'This is a warning' )
# Сообщение ошибки
logging.error( u'This is an error message' )
# Сообщение критическое
logging.critical( u'FATAL!!!' )
Теперь после вывода мы получим все сообщения:
DEBUG:root:This is a debug message
INFO:root:This is an info message
WARNING:root:This is a warning
ERROR:root:This is an error message
CRITICAL:root:FATAL!!!
Но все равно как то скудно выглядит вывод из него мало чего поймешь, для это так же в конфиге логера можно задать формат выводимого сообщения, посмотреть все атрибуты можно (вот здесь):
logging.basicConfig(format = u'%(filename)s[LINE:%(lineno)d]# %(levelname)-8s [%(asctime)s] %(message)s', level = logging.DEBUG)
теперь после вывода мы получаем вот такие сообщения:
log.py[LINE:33]# DEBUG [2012-05-25 00:11:58,466] This is a debug message
log.py[LINE:34]# INFO [2012-05-25 00:11:58,466] This is an info message
log.py[LINE:35]# WARNING [2012-05-25 00:11:58,466] This is a warning
log.py[LINE:36]# ERROR [2012-05-25 00:11:58,467] This is an error message
log.py[LINE:37]# CRITICAL [2012-05-25 00:11:58,467] FATAL!!!
Уже что то больше похожее на логи и видно имя файла и строка в которой вызванно сообщение, но выводить их во время работы хорошо когда идет разработка ну а при сдаче проекта лучше их писать в файл, так давайте запишем их туда, для этого так же в конфигурации предусмотрен параметр для того что бы указать куда будем писать лог:
logging.basicConfig(format = u'%(levelname)-8s [%(asctime)s] %(message)s', level = logging.DEBUG, filename = u'mylog.log')
теперь логи будут писать в файл указанный в параметре filename, на самом деле у этого логера очень много возможностей я показал лишь те которые нужны для начала работы с логером более подробную информацию можно прочитать на офф. сайте docs.python.org/library/logging.html
Автор: FenixGnom