gpt4 book ai didi

python - 难以理解 Python 的记录器传播

转载 作者:行者123 更新时间:2023-11-28 22:41:41 27 4
gpt4 key购买 nike

在定义记录器配置的 logging.json 文件中,我定义了一个记录器 script_logger 和一个处理程序 console 设置为输出每个日志记录消息到标准输出。它有 "propagate": "no" 因为我不希望将事件传播到根记录器,但是当我创建日志消息时,它无论如何都会在 stdout 上显示两次。

唯一不让消息出现两次的方法是从 root 记录器中删除处理程序 consolepropagate 属性似乎没有效果。

为什么?有人可以帮忙吗?

$ python test_script.py
2015-09-02 14:26:35,436 - script_logger - DEBUG - debug msg
2015-09-02 14:26:35,436 - script_logger - DEBUG - debug msg

测试脚本.py

import logging

if __name__ == "__main__":

logger = logging.getLogger("script_logger")
logger.debug("debug msg")

logging.json

{
"version": 1,
"disable_existing_loggers": false,
"formatters": {
"simple": {
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
}
},

"handlers": {
"console": {
"class": "logging.StreamHandler",
"level": "DEBUG",
"formatter": "simple",
"stream": "ext://sys.stdout"
},

"info_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "INFO",
"formatter": "simple",
"filename": "info.log",
"maxBytes": 10485760,
"backupCount": 20,
"encoding": "utf8"
},

"error_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "ERROR",
"formatter": "simple",
"filename": "errors.log",
"maxBytes": 10485760,
"backupCount": 20,
"encoding": "utf8"
}
},

"loggers": {
"script_logger": {
"level": "DEBUG",
"handlers": ["console"],
"propagate": "no"
}
},

"root": {
"level": "DEBUG",
"handlers": ["console", "info_file_handler", "error_file_handler"]
}
}

最佳答案

消息被记录了两次,因为 console 记录器在 rootscript_logger 中——但我想你已经知道了.

只需将 "propagate": "no" 替换为 "propagate": False,一切都会如您所愿。

关于python - 难以理解 Python 的记录器传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32353723/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com