python3 logging 如何让rootLogger不输出

用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
阅读 5.1k
1 个回答

python的logger有一个propagate属性,如果这个属性是True,那么这个logger的输出会朝着上一级logger传播

所以需要把其他logger的propagate属性设置为False

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进