用python的logging模块,我想让info日志输出到info.log中,warn日志输出到warn.log中;
本来我不想配置这个root logger,但是不配置就会报错,而且所有的输出都会在这个root logger里面再输出一遍;
我理解root是找不到其他logger的时候才在root输出,为什么所有的日志都会在root里面再输出一遍?
[loggers]
keys = root, info, warn
[logger_root]
handlers = root
qualname = root
level = DEBUG
[logger_info]
handlers = info
qualname = info
level = INFO
[logger_warn]
handlers = warn
qualname = warn
level = WARNING
[handlers]
keys = root, info, warn
[handler_root]
class = StreamHandler
formatter = warn
args = (sys.stdout,)
[handler_info]
class = FileHandler
formatter = info
args = ("log/info.log", "a")
[handler_warn]
class = FileHandler
formatter = warn
args = ("log/warn.log", "a")
[formatters]
keys = info, warn
[formatter_info]
format = %(asctime)s %(message)s
datefmt = %Y-%m-%d %H:%M:%S
[formatter_warn]
format = %(levelname)s %(asctime)s [%(filename)s:%(lineno)d] %(message)s
python的logger有一个propagate属性,如果这个属性是True,那么这个logger的输出会朝着上一级logger传播
所以需要把其他logger的propagate属性设置为False