【发布时间】: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.log 和 celery_worker_err.log 存储所有级别的所有日志:INFO、WARNING、ERROR...为什么?
如何为 celery 配置 logger 以将所有 celery 日志仅重定向到 stdout,并让 supervisord 仅在 celery_worker.log 上存储级别信息?
谢谢
【问题讨论】:
标签: django logging celery supervisord