我有一个带芹菜任务的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芹菜配置:
我的问题就像你在Django里面看到的那样 - >芹菜处理程序我已经指定"' stream':sys.stdout",但是当我用supervisord开始芹菜时,我会看到两个日志 存储所有级别的所有日志的 celery_worker.log 和 celery_worker_err.log :INFO,WARNING,ERROR ......为什么?
如何为celery配置logger,将所有celery日志重定向到stdout,并仅在 celery_worker.log 上让supervisord存储级别信息?
感谢
答案 0 :(得分:3)
我认为这是因为默认情况下celery将事情报告给stderr而不是stdout, 你可以使用supervisord redirect_stderr = true flag将两个文件组合成一个文件,如果有帮助的话。
如果没有指定日志文件,芹菜中的设置允许您指定日志文件,它使用stderr。