2010-04-10 14 views
37

मैं एक दृश्य समारोह में विभिन्न बिंदुओं पर अपने django ऐप में संदेशों को डीबग करना चाहता हूं। django-debug-toolbar के लिए दस्तावेज़ कहते हैं कि यह पाइथन लॉगिंग में निर्माण का उपयोग करता है लेकिन मुझे तब कोई और जानकारी नहीं मिल रही है। मैं वास्तव में एक फ़ाइल में लॉग इन नहीं करना चाहता हूं लेकिन टूलबार पर जानकारी फलक पर। यह कैसे काम करता है?मैं Django डीबग टूलबार में लॉगिंग का उपयोग कैसे करूं?

उत्तर

43

आप केवल logging module विधियों का उपयोग करते हैं और डीजेडीटी लॉगिंग पैनल में उन्हें रोक देगा और प्रदर्शित करेगा।

import logging 

logging.debug('Debug Message') 

if some_error: 
    logging.error('Error Message') 
8

जड़ लकड़हारा के लिए सीधे प्रवेश हो रहा है, @ jonwd7 उल्लेख किया है, आमतौर पर अनुशंसित नहीं है। आम तौर पर मैं इस पैटर्न अनुसरण कर रहा हूं:

import logging 
logger = logging.getLogger(__name__) 
del logging # To prevent accidentally using it 

... 

logger.debug("Some message") 

यह अनुमति देता है आप पर अधिक नियंत्रण है जिस पर लॉग इन करने के संदेशों और नहीं दिखा कणों का है। दुर्भाग्यवश, इसका उपयोग इस तरह से किसी भी लॉग संदेशों को कैप्चर करने से django डीबग टूलबार को रोकता है जबतक कि आप एक विशेष लॉगिंग कॉन्फ़िगरेशन निर्दिष्ट नहीं करते हैं। यहाँ सबसे सरल एक मैं के साथ आ सकता है:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'incremental': True, 
    'root': { 
     'level': 'DEBUG', 
    }, 
} 

स्थापना "वृद्धिशील" और "disable_existing_loggers" तो तुम हैंडलर उपकरण पट्टी जड़ लकड़हारा से जुड़ी अक्षम करने नहीं कर रहे हैं दोनों महत्वपूर्ण है। आप बस इतना करना चाहते हैं कि रूट लॉगजर के loglevel को "DEBUG" पर सेट करें। आप विशिष्ट लॉगर्स के लिए स्तर सेट करने के लिए "लॉगर्स" प्रविष्टि का भी उपयोग कर सकते हैं। बस "हैंडलर" खंड को छोड़ दें, और "प्रचार" सेट करें: सच है इसलिए वे डीजेडीटी हैंडलर द्वारा कब्जा कर लिया गया है।

+1

रूट लॉगर के साथ विस्तार से जाने के लिए धन्यवाद। यह जानकारी है कि अन्य उत्तरों की कमी है। – jnns

+1

सेटिंग भाग ने मुझे मदद की, धन्यवाद! 2016 में अभी भी अच्छी सलाह है – Jeff

0

यदि आपके पास मौजूदा LOGGING कॉन्फ़िगरेशन है, और आप इसे 'incremental' पर स्विच करके गड़बड़ नहीं करना चाहते हैं, तो आपको डीजेडीटी लॉग को एक हैंडलर के रूप में फिर से जोड़ना होगा, फिर इसे जोड़ें हैंडलर की रूट लॉगर की सूची।

from debug_toolbar.panels.logging import collector # needed for handler constructor below 
LOGGING = { 
    # existing options, formatters, loggers, etc 
    handlers = { 
     # existing handlers 
     'djdt_log': { 
      'level': 'DEBUG', 
      'class': 'debug_toolbar.panels.logging.ThreadTrackingHandler', 
      'collector': collector, 
     }, 
    }, 
    'root': { 
     'level': 'DEBUG', 
     'handlers': ['djdt_log'], 
    }, 
} 

यदि ऐसा करने के लिए एक क्लीनर तरीका है, तो मुझे इसे देखना अच्छा लगेगा।

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