[英]root logger invokes filehandler from non-root logger - I'm trying to understand why
所以我有一个像这样的日志记录dictconfig
import logging.handlers
from logging.config import dictConfig
LOGGING_DIR = '/homedir/LOGS'
LOGGING_CONFIG = {
'version': 1,
'disable_existing_loggers': False,
'loggers': {
'': { # root logger - logs to sys.stdout
'level': 'NOTSET',
'handlers': ['rootLoggerStreamHandler'],
},
'opslog': { # logs modules in their own logfile
'level': 'NOTSET',
'handlers': ['opsLogFileHandler'],
'propagate': False
}
},
'handlers': {
'rootLoggerStreamHandler': {
'level': 'DEBUG',
'formatter': 'simpleFormatter',
'class': 'logging.StreamHandler',
'stream': 'ext://sys.stdout', # Default is stderr
},
'opsLogFileHandler': {
'level': 'INFO',
'formatter': 'simpleFormatter',
'class': 'logging.handlers.RotatingFileHandler',
'filename': f'{LOGGING_DIR}/opslog.log',
'mode': 'a',
'maxBytes': 200000000,
'backupCount': 2,
'encoding': None,
'delay': False
},
},
'formatters': {
'simpleFormatter': {
'format': '%(asctime)s: %(filename)s: module:%(funcName)s: %(levelname)s: %(message)s'
},
},
}
我写了一个这样的测试脚本:
import logging
import logging.config
import logger_config # file that contains a dict with logger config.
logging.config.dictConfig(logger_config.LOGGING_CONFIG)
logger = logging.getLogger() # will get the root logger
logger.info("this is a test")
当我运行脚本时,发生了两件事
2021-12-19 20:49:06,428: streamhandler_test.py: module:<module>: INFO: this is a test
“opslog.log”显然是由 opsLogFileHandler 创建的,所以我的脚本以某种方式调用了“opsLogFileHandler”。
我猜它与 inheritance 有关,但是当我调用根记录器时,我看不出为什么不相关的 opsLogFileHandler(仅绑定到“opslog”记录器)应该创建一个空文件。
此外,如果我正确理解 inheritance ,则从任何非根记录器到根记录器都有一个子 -> 父关系(除非传播设置为 False),但反之则不然。
我尝试通过阅读文档找到答案,但坦率地说,文档很复杂,我无法解决。
任何关于为什么创建该文件“opslog.log”的解释都非常受欢迎
opslog.log
文件是在您创建opsLogFileHandler
处理程序时创建的,因为delay
参数在其配置中设置为False
。 (如果delay
是True
,文件直到第一次需要写入文件时才会打开。)
处理程序是在您进行配置时创建的。 因此,一旦您调用dictConfig()
,将为 append 打开该opslog.log
文件,如果它不存在,则创建为准备写入的空文件。
刚刚尝试了您的解决方案,这就像一个魅力。 一如既往,魔鬼在细节中。 非常感谢你帮助我!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.