Данный модуль, поставляемый в базовой комплектации Питона, предоставляет средства для ведения лог-журналов. Он поддерживает иерархичную цепочку уровней важности сообщений, различные обработчики сообщений, такие как различные лог файлы, HTTP, TCP, UDP, SMTP, Memory. За более подробным описанием необходимо обратиться в справочные средства Питона.
logging.basicConfig(format=
datefmt=
level=logging.DEBUG,
filename=
logging.debug(
logging.log(1,
logging.critical(
2011-07-20 12:45:19.576 CRITICAL in 'logging_test1' at line 13: критическая ошибка! Вследствии чего Мир , возможно, был удален
В общем случае подобное поведение можно задать двумя способами: задать настройки непосредственно в коде или вынести их в отдельный файл, для последующей загрузки.
Пример кода:
log=logging.getLogger(
log.setLevel(logging.DEBUG)
formatter=logging.Formatter(
handler=logging.StreamHandler(sys.stderr)
handler.setFormatter(formatter)
handler.setLevel(logging.DEBUG)
log.addHandler(handler)
handler=logging.FileHandler(
handler.setLevel(logging.INFO)
handler.setFormatter(formatter)
log.addHandler(handler)
handler=logging.handlers.SMTPHandler(
handler.setLevel(logging.CRITICAL)
handler.setFormatter(formatter)
log.addHandler(handler)
log.log(1,
log.debug(
log.info(
log.warn(
log.error(
a=1/0
log.exception(
log.critical(
Однако, более удобно и практично настройки логирования вывести в отдельный конфигурационный файл, а затем прочитать их. Приемущество такого подхода заключается в хорошем тоне программирования - в возможности изменения базового уровня сообщений не исправляя сам код программы.
Пример такого файла log.conf:
keys=root
[handlers]
keys=handler1, handler2, handler3
[formatters]
keys = formatter1
[logger_root]
qualname=main
level=DEBUG
handlers=handler1,handler2,handler3
[handler_handler1]
class=StreamHandler
level=DEBUG
formatter=formatter1
args=(sys.stdout,)
[handler_handler2]
class=FileHandler
level=INFO
formatter=formatter1
args=('my_app.log','a')
[handler_handler3]
class=handlers.SMTPHandler
level=CRITICAL
formatter=formatter1
args=('mail.exammple.ru','user@exammple.ru','user@exammple.ru','Critical error found')
[formatter_formatter1]
format=%(asctime)s.%(msecs)d %(levelname)s in '%(module)s' at line %(lineno)d: %(message)s
datefmt=%Y-%m-%d %H:%M:%S
class=logging.Formatter
Программный код будет выглядеть следующим образом:
logging.config.fileConfig(
log=logging.getLogger(
log.log(1,
log.debug(
log.info(
log.warn(
log.error(
a=1/0
log.exception(
log.critical(
2011-07-21 12:02:50.303 INFO in 'logging_test2' at line 10: info message
2011-07-21 12:02:50.303 WARNING in 'logging_test2' at line 11: warn message
2011-07-21 12:02:50.303 ERROR in 'logging_test2' at line 12: error message
2011-07-21 12:02:50.303 ERROR in 'logging_test2' at line 16: exception message
Traceback (most recent call last):
File "C:\Documents and Settings\mer\workspace\test\src\logging_test2.py", line 14, in
a=1/0
ZeroDivisionError: integer division or modulo by zero
2011-07-21 12:02:50.303 CRITICAL in 'logging_test2' at line 17: critical message
Для более стуктурно сложных и масштабных приложений
0 коммент.:
Отправить комментарий