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

Django应用启动时出现重复日志的问题排查求助

Django开发中runserver启动日志重复打印问题排查

问题描述

我在使用Django开发网站时,启动应用发现部分日志行重复打印,日志示例如下:

>python manage.py runserver
test, this line should appear once!
test, this line should appear once!
Watching for file changes with StatReloader
Watching for file changes with StatReloader
Performing system checks...

couldn't import psycopg 'c' implementation: No module named 'psycopg_c'
System check identified no issues (0 silenced).
Exception in thread django-main-thread:
Traceback (most recent call last):
... 

此前为处理耗时任务,我在视图中添加了多线程代码:

def my_view(request):
      t = threading.Thread(target=send_telegram_message, args=["text"], daemon=True)
      t.start()
      return ...

send_telegram_message函数用于给大量用户发送邮件,耗时较长。

项目目录结构如下:

ecommerce_root
├── other_apps (包含2个其他应用)
├── static
├── website 
│   ├── views.py, __init__.py, admin.py, models.py, signals.py, urls.py
│   └── migrations
├── ecommerce
│   ├── settings.py, urls.py, asgi.py, wsgi.py, __init__.py
├── manage.py
└── requirements.txt

补充:使用命令python manage.py runserver --noreload启动时,无重复日志问题。

请问为何会出现重复日志?是否为多线程问题?求排查建议。


问题原因与排查建议

原因分析

  • 不是你添加的业务多线程导致的问题,核心原因是Django的自动重载机制(StatReloader):
    默认情况下runserver会启动两个进程:一个主进程负责监听文件变化,一个子进程负责实际运行应用。如果你的日志配置在两个进程中都重复初始化了日志处理器,就会导致同一条日志被两个进程各打印一次。
  • 用--noreload启动时关闭了自动重载,只启动一个进程,日志不再重复,这也验证了这个原因。

排查与解决建议

  • 检查日志配置位置:
    不要在settings.py全局范围直接调用logging.basicConfig()或手动添加日志处理器,因为自动重载时子进程会重新加载settings.py,导致重复添加处理器。建议用Django官方推荐的LOGGING配置字典来配置日志,或者把日志初始化代码放在wsgi.py/asgi.py这类入口文件中。
  • 验证日志是否重复初始化:
    在日志初始化的地方加一条标记日志,比如print("日志处理器初始化"),启动时如果出现两次,就确认是重复初始化导致的问题。
  • 业务多线程的日志注意事项:
    虽然这次问题和业务线程无关,但后续如果多线程中出现日志重复,要确保日志处理器是线程安全的,不要在每个线程中重复添加处理器。Django默认的日志配置是线程安全的,只要不手动重复初始化即可。
  • 使用Django官方日志配置示例:
    在settings.py中配置LOGGING字典,由Django统一管理日志,避免自动重载时重复初始化:
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console': {
                'class': 'logging.StreamHandler',
            },
        },
        'root': {
            'handlers': ['console'],
            'level': 'INFO',
        },
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:52:36