Django Celery 任务日志
Posted
技术标签:
【中文标题】Django Celery 任务日志【英文标题】:Django Celery Task Logging 【发布时间】:2013-09-30 11:03:30 【问题描述】:我在我正在处理的 Django 项目中设置了 Celery。我想将 celery 任务的日志记录与其余的 celery 日志(celerycam、celerybeat 等)分开。
根据 Celery 文档 (http://docs.celeryproject.org/en/latest/userguide/tasks.html#logging),我似乎应该能够为 'celery.task' 定义一个 Django 记录器,它应该可以做到这一点。但是,当我这样做时,日志中没有显示任何内容。如果我创建一个通用的“芹菜”记录器,一切都会显示出来,这意味着这可能与记录器的名称有关。
我在这里缺少什么?有没有办法做到这一点,或者所有芹菜原木必须放在一起?
为了它的价值,我设置了 CELERYD_HIJACK_ROOT_LOGGER = False。
我在 settings.py 中的日志设置:
LOGGING =
'version': 1,
'disable_existing_loggers': False,
'filters':
'require_debug_false':
'()': 'django.utils.log.RequireDebugFalse'
,
'formatters':
'standard':
'format': '%(asctime)s %(levelname)s [%(name)s: %(lineno)s] -- %(message)s',
'datefmt': '%m-%d-%Y %H:%M:%S'
,
,
'handlers':
'logfile':
'level': 'INFO',
'filters': None,
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/vagrant/logs/logfile.log',
'maxBytes': 1024*1024*5,
'backupCount': 3,
'formatter': 'standard'
,
'debug_logfile':
'level': 'DEBUG',
'filters': None,
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/vagrant/logs/debug_logfile.log',
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter': 'standard'
,
'default_logger':
'level': 'WARNING',
'filters': None,
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/vagrant/logs/default.log',
'maxBytes': 1024*1024*5,
'backupCount': 2,
'formatter': 'standard'
,
'celery_logger':
'level': 'DEBUG',
'filters': None,
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/vagrant/logs/celery.log',
'maxBytes': 1024*1024*5,
'backupCount': 2,
'formatter': 'standard'
,
'celery_task_logger':
'level': 'DEBUG',
'filters': None,
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/vagrant/logs/celery_tasks.log',
'maxBytes': 1024*1024*5,
'backupCount': 2,
'formatter': 'standard'
,
,
'loggers':
'':
'handlers': ['default_logger'],
'level': 'WARNING',
'propagate': True,
,
'django':
'handlers': ['logfile'],
'level': 'INFO',
'propagate': True,
,
'feedmanager':
'handlers': ['logfile', 'debug_logfile'],
'level': 'DEBUG',
'propagate': True,
,
'recipemanager':
'handlers': ['logfile', 'debug_logfile'],
'level': 'DEBUG',
'propagate': True,
,
'menumanager':
'handlers': ['logfile', 'debug_logfile'],
'level': 'DEBUG',
'propagate': True,
,
'celery.task':
'handlers': ['celery_task_logger'],
'level': 'DEBUG',
'propagate': True,
,
'celery':
'handlers': ['celery_logger'],
'level': 'DEBUG',
'propagate': True,
,
【问题讨论】:
celery.tasks 或 celery.task 谢谢——不过我不确定我是否遵循。我有一个 celery.task 的记录器,并尝试使用 celery.tasks 达到同样的效果。 【参考方案1】:我猜你的任务是你这样做
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
如果您这样做,那么您的记录器名称将是模块名称,因此如果您的任务位于名为 MyApp 的应用程序的 tasks.py 文件中,您的记录器将被命名为“MyApp.tasks”,您必须创建设置中的记录器“MyApp.tasks”。
如果你把所有任务都记录到同一个记录器中,你可以只用一个不同的字符串代替 __name__ 。即:'celery.task'
哦,请确保您的工作人员日志级别符合您的要求
【讨论】:
几乎可以肯定,谢谢!一上班就试试。出于好奇,为什么主 'celery' 记录器仍然捕获这些任务日志? 是的,可以确认这个工作,谢谢!仍然很困惑为什么主要的“芹菜”记录器会选择它们,但我可以忍受这个。以上是关于Django Celery 任务日志的主要内容,如果未能解决你的问题,请参考以下文章
django使用celery执行异步任务时采用信号实现每个任务日志独立存放(after_setup_logger)
celery:celery介绍架构基本使用,celery执行异步任务延迟任务定时任务,django中使用celery。
使用 Django-Celery 重试任务 - Django/Celery