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

如何查看/打印Django Celery任务日志?解决无日志输出问题

解决Celery任务日志不输出的问题

我来帮你排查Celery任务里logging.debug无输出的问题,结合你Mac开发+AWS Ubuntu部署的场景,给你几个实用的解决方向:

1. 先解决日志级别过滤问题

Python的logging模块默认级别是WARNING,debug级别的日志会直接被过滤掉。你可以直接在tasks.py里调整日志级别:

import string
from celery import shared_task
import logging

# 新增这行,把全局日志级别设为DEBUG
logging.basicConfig(level=logging.DEBUG)

@shared_task
def send_push_notification_celery(total):
    logging.debug("send_push_notification_celery")
    logging.debug("total:%d", total)
    return "i love you"

或者启动Celery Worker时直接指定日志级别,这种方式更灵活,不用修改代码:

# 替换your_project为你的Django项目名(即manage.py所在的目录名称)
celery -A your_project worker -l debug

2. 在Django配置里统一管理Celery日志

如果想在Django的settings.py里统一配置Celery的日志规则,可以添加这些参数:

# settings.py
CELERY_LOG_LEVEL = 'DEBUG'
# 开发环境可以先写本地路径,部署到Ubuntu后可改为/var/log/celery/worker.log
CELERY_LOG_FILE = './celery_local.log'

启动Worker时,Celery会自动读取这些配置生效。

3. AWS Ubuntu生产环境的额外注意事项

部署到Ubuntu服务器时,还要处理日志权限和进程管理的问题:

  • 日志目录权限:如果把日志写到/var/log/celery/目录,要先创建目录并给Celery进程赋予写入权限:
    sudo mkdir -p /var/log/celery
    sudo chown your_username:your_username /var/log/celery
    
  • 用systemd守护Celery进程:生产环境建议用systemd管理Celery,在service配置文件(比如/etc/systemd/system/celery.service)的ExecStart里指定日志级别和路径:
    ExecStart=/usr/bin/celery -A your_project worker -l debug --logfile=/var/log/celery/worker.log
    
    然后重载systemd并启动服务:
    sudo systemctl daemon-reload
    sudo systemctl start celery
    

4. 先验证任务是否真的在执行

如果调整日志后还是没输出,可以先确认任务是否被Worker接收:
启动Worker后,打开Django shell手动调用任务:

from your_app.tasks import send_push_notification_celery
send_push_notification_celery.delay(10)

看看Worker控制台有没有Received task这类基础日志。如果有,说明任务在正常执行,只是你的logging.debug没被正确输出;如果连基础日志都没有,那要先检查Celery和消息中间件(Redis/RabbitMQ)的连接是否正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:04:52