Django - Celery - supervisord日志配置

时间:2015-03-31 10:28:39

标签: django logging celery supervisord

我有一个带芹菜任务的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芹菜配置:

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

我的问题就像你在Django里面看到的那样 - >芹菜处理程序我已经指定"' stream':sys.stdout",但是当我用supervisord开始芹菜时,我会看到两个日志 存储所有级别的所有日志的 celery_worker.log celery_worker_err.log :INFO,WARNING,ERROR ......为什么?

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

感谢

1 个答案:

答案 0 :(得分:3)

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

如果没有指定日志文件,芹菜中的设置允许您指定日志文件,它使用stderr。