如何查看/打印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里指定日志级别和路径:
然后重载systemd并启动服务:ExecStart=/usr/bin/celery -A your_project worker -l debug --logfile=/var/log/celery/worker.logsudo 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
相关产品推荐
相关产品推荐

