我正在使用Supervisor来管理芹菜。 celery的supervisor配置文件包含以下两个条目:
stdout_logfile = /var/log/supervisor/celery.log
stderr_logfile = /var/log/supervisor/celery_err.log
令我困惑的是,虽然Celery工作正常并且所有任务都已成功完成,但它们都写入了celery_err.log。我认为那只会是错误的。 celery.log文件仅显示正常的芹菜启动信息。将成功完成任务的行为写入错误日志是否正确?
注意 - 任务肯定已成功完成(发送电子邮件,制作数据库条目等)。
答案 0 :(得分:3)
我遇到了和你一样的现象。这是因为芹菜的登录机制。只需查看celery logger source的setup_task_loggers方法。
如果未指定
logfile
,则使用sys.stderr
。
那么,够清楚吗?当未指定日志文件时,Celery使用sys.stderr。
解决方案:
答案 1 :(得分:0)
将错误日志写入成功完成任务的行为是否正确?
不,不是。我有相同的设置,日志记录工作正常。
celery.log有任务信息
[2015-07-23 11:40:07,066: INFO/MainProcess] Received task: foo[b5a6e0e8-1027-4005-b2f6-1ea032c73d34]
[2015-07-23 11:40:07,494: INFO/MainProcess] Task foo[b5a6e0e8-1027-4005-b2f6-1ea032c73d34] succeeded in 0.424549156s: 1
celery_err.log有一些警告/错误。尝试重新启动主管流程。
答案 2 :(得分:0)
您可能遇到的一个问题是python默认情况下会缓冲输出
在您的主管文件中,可以通过设置PYTHONUNBUFFERED环境变量来禁用此功能,请参见下面的Django示例主管文件
[program:celery-myapp]
environment=DJANGO_SETTINGS_MODULE="myapp.settings.production",PYTHONUNBUFFERED=1
command=/home/me/.virtualenvs/myapp/bin/celery -A myapp worker -B -l DEBUG
directory=/home/me/www/saleor
user=me
stdout_logfile=/home/me/www/myapp/log/supervisor-celery.log
stderr_logfile=/home/me/www/myapp/log/supervisor-celery-err.log
autostart=true
autorestart=true
startsecs=10