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

本地运行Django服务配置Watchtower后出现ERR_CONNECTION_REFUSED错误

问题原因
  • 你当前的配置将django根日志的输出仅绑定到了watchtower handler,本地开发环境如果网络无法正常访问AWS CloudWatch接口时,Django启动过程中产生的所有INFO级别日志都会触发同步上报请求,阻塞服务主线程,导致服务实际并未启动完成,所以访问时会返回ERR_CONNECTION_REFUSED。
  • 你看不到控制台报错的原因也正是因为Django的所有日志都被发往了CloudWatch,没有输出到本地控制台,你误以为服务启动无异常。
  • 将日志键改为watchtower后,只有watchtower组件自身的日志会走上报逻辑,Django框架的日志还是沿用默认的控制台输出,不会触发阻塞,所以服务可以正常启动。
解决方案
  • 方案1:本地开发环境关闭watchtower上报
    仅在部署到AWS环境时启用watchtower handler,本地开发只保留console handler,示例配置:
    import os
    ENVIRONMENT = os.getenv("ENV", "development")
    HANDLERS = ["console"]
    if ENVIRONMENT == "production":
        HANDLERS.append("watchtower")
    
    LOGGING = {
        # 其余原有配置保持不变
        'loggers': {
            'django': {
                'level': 'INFO',
                'handlers': HANDLERS,
                'propagate': True,
            },
        },
    }
    
  • 方案2:配置watchtower异步上报避免阻塞
    在watchtower handler配置中添加use_queues: True参数,启用异步队列上报日志,不会阻塞主线程:
    'watchtower': {
        'level': 'INFO',
        'class': 'watchtower.CloudWatchLogHandler',
        'boto3_session': boto3_session,
        'log_group': 'StagingBeagleApi',
        'stream_name': 'ApplicationLogStream',
        'formatter': 'aws',
        'use_queues': True, # 新增异步上报配置
    },
    
    同时建议在django logger的handlers中保留console,方便本地排查问题:
    'django': {
        'level': 'INFO',
        'handlers': ['console', 'watchtower'],
        'propagate': True,
    },
    
  • 方案3:排查本地AWS网络连通性
    确认本地配置的AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_REGION参数正确,且本地网络可以正常访问对应区域的CloudWatch接口,没有被防火墙、代理拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:27:03