25 May 2012

Logging — библиотека для удобного ведения логов в Python

Python
From Sandbox
В любой разработке приходится рано или поздно вести логи, ведь не отдашь же заказчику программу где отладочные сообщения выводятся с помощью 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
Tags: python*
Hubs: Python
+5
89.3k 158
Comments 13
Ads
Top of the day