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的标准模块,
需要先安装PyYaml
或 PySyck
。
使用后的感想,每个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) 编辑 收藏 举报