2013-09-25 10 views
7

मैंने एक Django परियोजना में सेलेरी स्थापित की है जिस पर मैं काम कर रहा हूं। मैं अजवाइन के कार्यों के लिए लॉगिंग को अलग करना चाहता हूं, शेष सेलेरी लॉग (सेलेरीकैम, सेलेरीबीट, आदि)।डीजेगो सेलेरी टास्क लॉगिंग

सेलेरी प्रलेखन (http://docs.celeryproject.org/en/latest/userguide/tasks.html#logging) के आधार पर ऐसा लगता है कि मुझे 'celery.task' के लिए एक Django लॉगर को परिभाषित करने में सक्षम होना चाहिए, जो इसे करना चाहिए। हालांकि, जब मैं ऐसा करता हूं, तो लॉग में कुछ भी दिखाई नहीं देता है। अगर मैं एक सामान्य 'अजवाइन' लॉगर बनाता हूं, तो यह सब कुछ दिखाता है, जिसका अर्थ है कि यह लॉगर के नाम से कुछ करना हो सकता है।

मुझे यहां क्या याद आ रही है? क्या यह काम करने का कोई तरीका है, या सभी अजवाइन लॉग एक साथ जाना चाहिए?

इसके लायक होने के लिए, मैंने CELERYD_HIJACK_ROOT_LOGGER = गलत सेट किया है।

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 नामक ऐप में task.py फ़ाइल में है, तो आपके लॉगर को 'MyApp.tasks' नाम दिया जाएगा और आपको अपनी सेटिंग्स में 'MyApp.tasks' लॉगर बनाना होगा।

यदि आप उन्हें सभी जगह पर रखते हैं तो आप सभी कार्यों के लिए __name__ के स्थान पर एक अलग स्ट्रिंग डाल सकते हैं। यानी: 'celery.task'

ओह और सुनिश्चित करें कि आपके कार्यकर्ता LogLevel क्या आप इसे

+1

यह लगभग निश्चित रूप से है, धन्यवाद! काम पर जल्द ही कोशिश करेंगे। जिज्ञासा से, मुख्य 'अजवाइन' लॉगर अभी भी इन कार्य लॉग को क्यों पकड़ता है? – aravenel

+1

हाँ, इस काम की पुष्टि कर सकते हैं, धन्यवाद! अभी भी उलझन में क्यों मुख्य 'अजवाइन' लॉगर उन्हें उठाता है, लेकिन मैं इसके साथ रह सकता हूं। – aravenel

संबंधित मुद्दे