Django 主管/芹菜输出日志

Django 主管/芹菜输出日志,django,celery,supervisord,Django,Celery,Supervisord,我用主管来管理芹菜。芹菜的主管配置文件包含以下2个条目: stdout_logfile = /var/log/supervisor/celery.log stderr_logfile = /var/log/supervisor/celery_err.log 让我困惑的是,尽管芹菜工作正常,所有任务都顺利完成,但它们都被写入芹菜的err.log。我以为那只会是错误。log文件仅显示普通芹菜启动信息。将成功任务完成写入错误日志的行为是否正确 注意-任务肯定会成功完成(发送电子邮件、数据库条目等)

我用主管来管理芹菜。芹菜的主管配置文件包含以下2个条目:

stdout_logfile = /var/log/supervisor/celery.log
stderr_logfile = /var/log/supervisor/celery_err.log
让我困惑的是,尽管芹菜工作正常,所有任务都顺利完成,但它们都被写入芹菜的err.log。我以为那只会是错误。log文件仅显示普通芹菜启动信息。将成功任务完成写入错误日志的行为是否正确

注意-任务肯定会成功完成(发送电子邮件、数据库条目等)

将成功任务完成写入错误日志的行为是否正确

不,不是。我有相同的设置和日志工作良好

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有一些警告/错误。尝试重新启动主管进程。

我遇到了和你一样的现象。这是因为芹菜的登录机制。只需查看的设置任务记录器方法

如果未指定
logfile
,则使用
sys.stderr

那么,清楚了吗?芹菜在未指定日志文件时使用sys.stderr

解决方案:

  • 您可以使用supervisord redirect_stderr=true标志将两个日志文件合并为一个。我用这个
  • 配置芹菜日志文件选项

  • 您可能会遇到的一个问题是python在默认情况下会缓冲输出

    在您的管理器文件中,您可以通过设置PYTHONUNBUFFERED环境变量来禁用它,请参见下面的my 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