2013-09-25 181 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