пятница, 14 сентября 2012 г.

Python logging

Python logging - библиотека для удобного ведения логов в Python.

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

#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.

Комментариев нет:

Отправить комментарий