2013-09-25 20 views
7

Mam ustawić Celery w projekcie Django, nad którym pracuję. Chciałbym oddzielić rejestrowanie zadań selera od pozostałych dzienników selera (celerycam, selerabeat itd.).Django Seler Zadanie Rejestracja

Na podstawie dokumentacji selera (http://docs.celeryproject.org/en/latest/userguide/tasks.html#logging) wygląda na to, że powinienem umieć zdefiniować rejestrator Django dla "selera.task", który powinien to zrobić. Jednak gdy to zrobię, nic nie pojawia się w dziennikach. Wszystko pojawia się, jeśli utworzę ogólny rejestrator selera, co oznacza, że ​​może to mieć coś wspólnego z nazwą programu rejestrującego.

Czego mi tu brakuje? Czy istnieje sposób, aby to zadziałało, czy też wszystkie dzienniki selera muszą być ze sobą powiązane?

Za to, co jest warte, ustawiłem CELERYD_HIJACK_ROOT_LOGGER = Fałsz.

Moja konfiguracja rejestrowania w 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 lub celery.task – toad013

+1

Dzięki - nie wiem, choć śledzę. Mam rejestrator dla selera.task i wypróbowałem selera.tasks, aby uzyskać ten sam efekt. – aravenel

Odpowiedz

15

Zgaduję w zadaniach robisz to

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

jeśli robi to wówczas nazwa rejestrator będzie nazwa modułu, więc jeśli twoje zadanie znajduje się w pliku tasks.py w aplikacji o nazwie MyApp, twój program rejestrujący zostanie nazwany "MyApp.tasks", a będziesz musiał utworzyć program rejestrujący "MyApp.tasks" w swoich ustawieniach.

Możesz po prostu wstawić inny ciąg znaków w miejsce __name__ dla wszystkich zadań, aby zalogować się do tego samego programu rejestrującego, jeśli masz je w dowolnym miejscu. czyli: „celery.task”

oh i upewnić się, że loglevel pracownik jest do tego, co chcesz go mieć

+1

To prawie na pewno jest, dzięki! Postaram się jak najszybciej w pracy. Z ciekawości, dlaczego główny logger selera nadal łapie te dzienniki zadań? – aravenel

+1

Tak, mogę to potwierdzić, dziękuję! Nadal nie rozumiem, dlaczego główny "seler" rejestruje je, ale mogę z tym żyć. – aravenel

Powiązane problemy