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

如何避免Django在shell中输出多条重复日志

Django日志重复输出问题解决方案

核心原因

你编写的日志初始化逻辑(创建logger、设置日志级别、添加StreamHandler的代码)每被执行一次,就会给名为LoggingTest的logger新增一个独立的StreamHandler实例,每个Handler都会单独处理一次日志输出,初始化代码被执行多少次就会输出多少条重复日志。Django项目中如果这段初始化代码写在模块顶层、可被重复调用的函数/视图内,就会触发该问题。
另外如果没有关闭logger的向上传递属性,日志也会被父logger(如root logger)的Handler处理,额外产生重复输出。

修复方案

  • 方案1:在日志初始化代码中增加判断逻辑,避免重复添加Handler
    修改你的日志初始化代码如下即可:
import logging

logger = logging.getLogger('LoggingTest')
logger.setLevel(20)
# 仅当logger无任何Handler时才新增Handler
if not logger.handlers:
    sh = logging.StreamHandler()
    logger.addHandler(sh)
# 关闭日志向上传递,避免父logger重复输出
logger.propagate = False
  • 方案2:使用Django原生统一日志配置(更推荐)
    不要在业务代码中零散初始化日志Handler,直接在项目的settings.py中全局配置日志:
# settings.py 新增如下配置
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'LoggingTest': {
            'handlers': ['console'],
            'level': 'INFO', # 对应你设置的级别20
            'propagate': False,
        },
    },
}

后续业务代码直接调用logger即可,无需再做初始化操作:

import logging
logger = logging.getLogger('LoggingTest')

# 你的业务逻辑
si_ids = Blank_Form.objects.get(blank_form_id__exact=blank_form_id).core_service_id.split('s')[1::]
logger.info('[si_ids] {}'.format(si_ids))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:15:05