我在我正在工作的Django项目中设置了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,
},
}
}
答案 0 :(得分:18)
我在你的任务中猜测你这样做
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
如果您这样做,那么您的记录器名称将是模块名称,因此如果您的任务位于名为MyApp的应用程序中的tasks.py文件中,则您的记录器将被命名为“MyApp.tasks”并且您必须创建您的设置中的记录器“MyApp.tasks”。
如果你将它们全部放在一起,你可以为所有任务添加一个不同的字符串代替__name__来记录到同一个记录器。即:'celery.task'
哦,确保你的工作日志水平符合你想要的目标