2013-09-25 153 views
7

我已经在我正在使用的Django项目中设置了芹菜。我想分开芹菜任务的日志记录与芹菜日志的其余部分(celerycam,celerybeat等)。Django芹菜任务记录

基于芹菜文档(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

celery.tasks或celery.task – toad013

+1

感谢什么 - 不知道我跟着虽然。我有一个celery.task的记录器,并且尝试过celery.tasks来达到同样的效果。 – aravenel

回答

15

我猜你的任务,你这样做

from celery.utils.log import get_task_logger 
logger = get_task_logger(__name__) 

如果你这样做,那么你的记录器名称将是模块名,因此如果您的任务位于名为MyApp的应用程序的tasks.py文件中,则您的记录器将被命名为“MyApp.tasks”,并且您必须在设置中创建记录器“MyApp.tasks”。

如果您将所有任务都记录到同一个记录器,则可以将其他字符串替换为__name__。即:“celery.task”

哦,并确保你的工人日志级别是你希望它是

+1

这几乎是肯定的,谢谢!将尽快尝试工作。出于好奇,为什么主要'芹菜'记录器仍然捕获这些任务日志? – aravenel

+1

是的,可以确认此作品,谢谢!仍然困惑为什么主要'芹菜'记录员拿起他们,但我可以忍受这一点。 – aravenel