【问题标题】:Supervisord / Celery output logsSupervisord / Celery 输出日志
【发布时间】:2015-10-11 22:07:02
【问题描述】:

我正在使用 Supervisor 来管理 celery。 celery 的主管配置文件包含以下 2 个条目:

stdout_logfile = /var/log/supervisor/celery.log
stderr_logfile = /var/log/supervisor/celery_err.log

让我困惑的是,虽然 Celery 工作正常并且所有任务都成功完成,但它们都写入了 celery_err.log。我认为那只是为了错误。 celery.log 文件只显示正常的 celery 启动信息。将任务成功完成写入错误日志的行为是否正确?

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

【问题讨论】:

    标签: django celery supervisord


    【解决方案1】:

    我遇到了和你一样的现象。这是因为 celery 的日志机制。看celery logger source的setup_task_loggers方法就行了。

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

    那么,够清楚了吗?未指定日志文件时,Celery 使用 sys.stderr。

    解决方案:

    1. 您可以使用 supervisord redirect_stderr = true 标志将两个日志文件合并为一个。我正在使用这个。
    2. 配置 celery 日志文件选项。

    【讨论】:

      【解决方案2】:

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

      不,不是。我有相同的设置并且日志记录工作正常。

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

      【讨论】:

        【解决方案3】:

        您可能遇到的一个问题是默认情况下 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
        

        【讨论】:

          猜你喜欢
          • 2015-06-04
          • 2012-12-05
          • 2015-07-25
          • 2023-04-10
          • 2018-02-04
          • 2018-02-26
          • 2021-07-03
          • 2014-07-06
          • 2014-06-14
          相关资源
          最近更新 更多