2013-09-25 8 views
7

Ho installato Celery in un progetto Django su cui sto lavorando. Vorrei separare la registrazione dei compiti di sedano e il resto dei registri di sedano (sedano, sedano, ecc.).Django Celery Task Logging

In base alla documentazione di Celery (http://docs.celeryproject.org/en/latest/userguide/tasks.html#logging) sembra che dovrei essere in grado di definire un logger Django per "celery.task" che dovrebbe fare ciò. Tuttavia, quando faccio questo, non compare nulla nei log. Tutto appare se creo un logger generico "celery", il che implica che potrebbe essere qualcosa a che fare con il nome del logger.

Cosa mi manca qui? C'è un modo per farlo funzionare o tutti i registri di sedano vanno insieme?

Per quello che vale, ho impostato CELERYD_HIJACK_ROOT_LOGGER = False.

La mia configurazione di registrazione in 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 o celery.task – toad013

+1

Grazie - non sono sicuro che seguo però. Ho un logger per celery.task, e ho provato sedery.tasks allo stesso effetto. – aravenel

risposta

15

Sto indovinando nelle vostre attività il vostro fare questo

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

se il farlo allora il vostro nome logger sarà il nome del modulo, quindi se il tuo compito si trova in un file tasks.py in un'app chiamata MyApp, il tuo logger verrà chiamato "MyApp.tasks" e dovrai configurare il logger "MyApp.tasks" nelle tue impostazioni.

Si può semplicemente mettere una stringa diversa al posto di __name__ per tutte le attività di accedere allo stesso registratore se le si trovano tutte in posizione. vale a dire: 'celery.task'

oh e assicurarsi che il livello di log dei lavoratori è quello di ciò che si vuole che sia

+1

Questo è quasi certamente, grazie! Ci proveremo non appena al lavoro. Per curiosità, perché il logger principale 'celery' cattura ancora questi registri delle attività? – aravenel

+1

Sì, puoi confermare questo funziona, grazie! Ancora confuso perché il principale registratore di 'sedano' le preleva, ma posso convivere con questo. – aravenel