Good,True and Beautiful

Good Good Study, Day Day Up

导航

Python Logging

Python Standard module : Logging

Python的日志模块很像 Apache的 Log4j, 使用起来也很方便

可以通过 logging.basicConfig 在代码中配置,也可以通过 logging.config.fileConfig 在文件中配置
,不过该文件使用的是configparser,因此配置文件为ini格式,如


[loggers]
keys=root, apiev

[handlers]
keys=rollfile, stdout

[formatters]
keys=simple


[formatter_simple]
format=%(asctime)s %(name)s [%(levelname)s] %(message)s
datefmt= %Y-%m-%d %H:%M:%S


[handler_rollfile]
class=handlers.RotatingFileHandler
formatter=simple
args=('logs/log.log', 'a', 1048576)

[handler_stdout]
class=StreamHandler
formatter=simple
args = (sys.stdout,)

# Levels : DEBUG, INFO, WARNING, ERROR, CRITICAL or NOTSET

[logger_root]
level=DEBUG
handlers=rollfile, stdout

[logger_apiev]
level=WARNING
handlers=rollfile, stdout
qualname=api.ev

所有的 logger 必须指定 handlers,否则会报KeyError错误,而 默认的Root Logger还必须要指定level
每个handler必须要有class和args。另外,还可以使用 Yaml格式的配置文件,这样Python解析该文件后得到一个Dict,
从而使用logging.config.dictConfig来配置,不过yaml解析不是Python的标准模块,
需要先安装PyYamlPySyck

使用后的感想,每个logger都需要指定handler,而handler可以指定formatter,
而且logger中所使用的handler必须在handlers的keys中。因此个人认为,
没有必要再设置formatters和handlers这两个section,反倒是 减少了 配置文件修改的灵活性。
要做到这一点,也很容易,只需要修改文件Lib/logging/config.py中的2个地方几个:

  • 函数_create_formatters,直接获取所有的sections,然后 过滤得到以formatter_为前缀的section
  • 函数_install_handlers,同理。

从优化的角度,应该是先从loggers中获取所有的Logger, 然后从这些Logger中获取所有的handlers, 再从handlers中获取所有的formatters。

posted on 2015-05-23 19:14  Simple Love  阅读(474)  评论(0编辑  收藏  举报