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

Boto3 API调用重试导致日志重复打印?为何logger.info输出多次?

重复输出原因分析
  • 最核心诱因:Jupyter环境日志处理器重复注册

Python的logging模块默认不会自动清理历史注册的日志处理器,你每运行一次Jupyter单元格,就会给用到的logger(包括你自己定义的logger、boto3内部自带的logger)新增一个输出处理器。如果累计运行了5次单元格,logger就绑定了5个独立的输出处理器,每触发一次日志打印动作,5个处理器就会各自输出一次内容,最终就出现了你看到的所有日志行都重复5次的现象,包括boto3内部打印的凭证查找日志、你自己写的Session is active日志都会同步重复。

  • 其他可能触发原因

    • 代码中存在隐式循环逻辑,多次执行了会话初始化和日志打印代码
    • 未关闭logging层级传播:如果你的logger同时配置了父子层级的处理器,且没有设置logger.propagate = False,日志会向上传递到父logger被重复输出
修复方案

你可以在业务代码前增加日志处理器清空逻辑,每次运行前先清除已有的冗余处理器即可:

import logging
import boto3

# 替换为你实际使用的logger实例
logger = logging.getLogger(__name__)
# 清空当前logger的所有已注册处理器
logger.handlers = []
# 关闭日志向上传播,避免父logger重复输出
logger.propagate = False
# 按需配置你需要的日志处理器即可
logger.addHandler(logging.StreamHandler())

# 原有业务代码
session = boto3.session.Session(profile_name="profile1",region_name="us-east-1")
sts_client = session.client('sts')
account = sts_client.get_caller_identity()['Account']
logger.info("Session is active: {}".format(account))

运行后如果重复输出消失,即可确认是日志处理器重复注册导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:24:04