【发布时间】:2016-07-20 11:57:50
【问题描述】:
我来自 SLF4J 和 Log4J,所以这可能是我不明白 Python 中日志记录如何工作的原因。
我有以下
---- logging.yaml
version: 1
handlers:
console:
class: logging.StreamHandler
level: DEBUG
stream: ext://sys.stderr
formatter: simpleFormatter
file:
class: logging.FileHandler
filename: app.log
mode: w
level: DEBUG
formatter: simpleFormatter
formatters:
simpleFormatter:
#class: !!python/name:logging.Formatter
#class: logging.Formatter
format: '%(name)s %(asctime)s %(levelname)s %(message)s'
datefmt: '%d/%m/%Y %H:%M:%S'
root:
level: INFO
handlers: [console, file]
mod:
level: DEBUG
--mod.py
import logging
def foo ():
log = logging.getLogger ( __name__ )
log.debug ( 'Hello from the module' )
---- main.py
from logging.config import dictConfig
import yaml
with open ( 'logging.yaml' ) as flog:
dictConfig ( yaml.load ( flog ) )
import logging
from mod import foo
if __name__ == '__main__':
log = logging.getLogger ( __name__ )
log.debug ( 'Hello from main' )
foo ()
使用上面的配置,我希望只看到消息'Hello from the module'。相反,没有打印任何内容。当我为根记录器设置DEBUG 时,会打印两条消息。
那么,消息不是转发给上层记录器的吗? mod 记录器不是root 的孩子吗? mod 记录器不是继承了handlers 配置吗? (我尝试在mod 中重复handlers,但没有任何变化)。
我怎样才能实现这样的配置:默认级别是INFO,这个模块和子模块的级别是DEBUG,一切都转到为root定义的处理程序?
【问题讨论】:
-
我就把这个放在这里:python.org/dev/peps/pep-0008