You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用logging文件日志后asyncio协程未捕获异常无屏幕输出的原因与解决

根本原因
  • Python的logging.config.fileConfig方法默认参数disable_existing_loggers=True,调用时会禁用所有未在配置文件[loggers]段显式声明的已存在logger
  • asyncio模块在导入时就会创建名为asyncio的专属logger,未捕获的协程任务异常默认通过这个logger输出错误日志
  • 你的配置文件仅声明了root logger,调用fileConfig后asyncio logger被禁用,因此异常日志不会输出,既不会打印到屏幕,也不会写入日志文件
解决方案

两种方案均满足不修改业务逻辑、不禁用文件日志、不额外加try...except的要求:

方案1:修改fileConfig调用参数

调整logging配置行的参数,关闭自动禁用已有logger的逻辑:

logging.config.fileConfig("logger.conf", defaults=dict(log_file="run.log"), disable_existing_loggers=False)

修改后asyncio logger会正常工作,未捕获异常会按你配置的root logger规则,同时输出到屏幕和写入日志文件。

方案2:在配置文件中显式声明asyncio logger

修改logger.conf的[loggers]段,新增asyncio logger声明:

[loggers]
keys=root,asyncio

再新增asyncio logger的配置段即可:

[logger_asyncio]
level=DEBUG
handlers=handlerScreen,handlerFile
qualname=asyncio
propagate=0

显式配置后asyncio logger不会被禁用,异常日志会按指定规则输出。

内容的提问来源于stack exchange,提问作者atline

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:06:06