如何调用Python中logging.config.dictConfig创建的Handler的方法?
解决dictConfig配置日志后调用Handler方法或传入自定义Handler的问题
方法一:获取已由dictConfig实例化的Handler并调用方法
当logging.config.dictConfig完成配置后,你可以从日志器对象中提取目标Handler实例,步骤如下:
- 获取目标日志器(示例中为根日志器):
root_logger = logging.getLogger()
- 遍历日志器的handlers列表,通过类型、文件名等特征匹配到目标Handler:
target_handler = None for handler in root_logger.handlers: if isinstance(handler, logging.handlers.RotatingFileHandler) and handler.baseFilename.endswith("log.txt"): target_handler = handler break
- 确认找到实例后,直接调用
doRollover方法:
if target_handler: target_handler.doRollover()
方法二:在dictConfig中传入手动实例化的Handler
如果你希望直接使用自己构造的Handler实例,可通过配置中的()字段实现,该字段接受一个可调用对象返回你的Handler实例:
- 手动实例化并配置Handler:
import logging from logging.handlers import RotatingFileHandler # 实例化Handler file_handler = RotatingFileHandler( filename="log.txt", backupCount=5, encoding="utf8" ) file_handler.setLevel(logging.NOTSET) # 绑定格式化器 default_formatter = logging.Formatter(logging.BASIC_FORMAT) file_handler.setFormatter(default_formatter)
- 修改dictConfig配置,用
()字段指向已实例化的Handler:
config = { "version": 1, "formatters": { "default_formatter": { "format": logging.BASIC_FORMAT, }, }, "handlers": { "file": { "()": lambda: file_handler, # 通过lambda返回预先实例化的Handler }, }, "loggers": { "": { "level": "NOTSET", "handlers": ["file"], }, }, } logging.config.dictConfig(config)
此时你可以直接通过保留的file_handler引用调用方法:
file_handler.doRollover()
内容的提问来源于stack exchange,提问作者Newbyte
相关产品推荐
相关产品推荐

