【问题标题】:Django - Celery - supervisord logging configurationDjango - Celery - supervisord 日志配置
【发布时间】:2015-06-04 15:56:14
【问题描述】:

我有一个带有 celery 任务的 django 项目(在里面运行),但是我有一个关于日志记录的问题,我所做的是:

任务记录 get_task_logger :

from celery.utils.log import get_task_logger
logger = get_task_logger('celery')

Django 日志记录:

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'root': {
    'level': 'DEBUG',
    'handlers': ['sentry', 'file'],
},
'formatters': {
    'verbose': {
        'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
    },
},
'handlers': {
    'console': {
        'level': 'DEBUG',
        'class': 'logging.StreamHandler',
        'formatter': 'verbose',
    },
    'celery': {
        'level': 'INFO',
        'class': 'logging.StreamHandler',
        'stream': sys.stdout,
    },
 ........
},
'loggers': {
    'celery': {
        'handlers': ['celery'],
        'level': 'INFO',
    },
......
},

supervisord celery 配置:

  • [程序:芹菜] *command=/usr/local/bin/celery worker -A app --autoscale=20,10 -E -l INFO -Ofair
  • 目录=/xxx/celerydir
  • numprocs=1
  • stdout_logfile=/xxx/logs/celery_worker.log
  • stderr_logfile=/xxx/logs/celery_worker_err.log
  • 自动启动=true
  • 自动重启=true
  • startsecs=10
  • stopwaitsecs=600
  • stopasgroup=true
  • 优先级=998

我的问题是如您所见,在 Django -> celery 处理程序中,我指定了“'stream': sys.stdout”,但是当我使用 supervisord 启动 celery 时,我会看到两个日志 celery_worker.logcelery_worker_err.log 存储所有级别的所有日志:INFO、WARNING、ERROR...为什么?

如何为 celery 配置 logger 以将所有 celery 日志仅重定向到 stdout,并让 supervisord 仅在 celery_worker.log 上存储级别信息?

谢谢

【问题讨论】:

    标签: django logging celery supervisord


    【解决方案1】:

    我认为这是因为默认情况下 celery 将事情报告给 stderr 而不是 stdout, 如果有帮助,您可以使用 supervisord redirect_stderr = true 标志将两个文件合并为一个。

    celery 中有一个设置可以让你指定一个日志文件,如果没有指定日志文件,它使用标准错误。

    【讨论】:

      猜你喜欢
      • 2015-07-25
      • 2015-10-11
      • 2018-02-04
      • 2013-09-30
      • 2017-03-05
      • 1970-01-01
      • 2020-07-15
      • 2014-06-14
      • 2013-09-11
      相关资源
      最近更新 更多