2013-09-25 4 views
7

У меня есть установка Celery в проекте Django, над которым я работаю. Я хотел бы отделить лесозаготовки для задач сельдерея и остатков сельдерейных бревен (сельдерея, сельдерея и т. Д.).Django Celery Task Logging

Основываясь на документации по сельдерею (http://docs.celeryproject.org/en/latest/userguide/tasks.html#logging), похоже, что я должен просто определить регистратор Django для 'celery.task', который должен это сделать. Однако, когда я это делаю, в журналах ничего не отображается. Все появляется, если я создаю общий «сельдерейский» регистратор, подразумевая, что это может быть связано с именем регистратора.

Что мне здесь не хватает? Есть ли способ сделать эту работу, или все журналы сельдерея идут вместе?

Для чего это стоит, я установил 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

спасибо - не уверен, что я следую, хотя. У меня есть logger для celery.task, и я попробовал celery.tasks с тем же эффектом. – aravenel

ответ

15

я угадал в ваших задач делают ваши этот

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

если ваш делать, что тогда ваше имя регистратора будет имя модуля, поэтому, если ваша задача находится в файле tasks.py в приложении MyApp, ваш регистратор будет иметь имя «MyApp.tasks», и вам нужно будет создать журнал MyApp.tasks в ваших настройках.

Вы можете просто поместить другую строку вместо __name__ для всех задач для входа в тот же журнал, если у вас их все место. то есть: «celery.task»

ой и убедитесь, что ваш рабочий LogLevel является то, что вы хотите быть

+1

Это почти наверняка, спасибо! Попробуй, как только на работе. Из любопытства, почему главный «сельдерейский» журнал все еще ловит эти журналы задач? – aravenel

+1

Да, могу подтвердить это, спасибо! Все еще путают, почему главный «сельдерейский» регистратор поднимает их, но я могу жить с этим. – aravenel

Смежные вопросы