यह निर्धारित करते हुए कि पायथन में रूट लकड़हारा DEBUG स्तर पर सेट है?


93

यदि मैं लॉगिंग मॉड्यूल को इस तरह कमांड लाइन पैरामीटर के साथ DEBUG में सेट करता हूं:

if (opt["log"] == "debug"):
  logging.basicConfig(level=logging.DEBUG)

मैं बाद में कैसे बता सकता हूं कि लकड़हारा DEBUG में सेट किया गया था? मैं एक डेकोरेटर लिख रहा हूं जो एक फ़ंक्शन का समय देगा यदि ट्रू फ्लैग इसे पास कर दिया गया है, और यदि कोई झंडा नहीं दिया गया है, तो यह रूट लकड़हारा को डीबग पर सेट करने पर समय की जानकारी को प्रिंट करने में चूक करता है।


आप अंततः इसे लकड़हारे के पास भेजने के बजाय कुछ विशिष्ट का उपयोग करना चाहेंगे, जैसे कि ऑप्ट ["time_functions"] (जिसे आप किसी अन्य विकल्प के आधार पर ट्रू / फॉल्ट के लिए डिफ़ॉल्ट कर सकते हैं)।

जवाबों:


116
logging.getLogger().getEffectiveLevel()

logging.getLogger() बिना तर्क के रूट लेवल लकड़हारा हो जाता है।

http://docs.python.org/library/logging.html#logging.Logger.getEffectiveLevel


उत्कृष्ट धन्यवाद! मैं ऐसा कुछ कर रहा था (GetLogger को स्पष्ट "रूट" को छोड़कर), लेकिन मैं इसे अपने डेकोरेटर के init फ़ंक्शन में कर रहा था , इससे पहले कि लकड़हारा डीबग करने के लिए सेट किया गया था: \
gct

5
यदि आप स्तर का नाम चाहते हैं, तो संख्या नहीं, आप इसका उपयोग संख्या को स्ट्रिंग में बदलने के लिए कर सकते हैं (जैसे 'INFO'): logging.getLevelName ()
guettli

2
@guettli, getLevelName () को उस स्तर के एक तर्क की आवश्यकता होती है जिसका पाठीय प्रतिनिधित्व आप प्राप्त करना चाहते हैं। तो कॉल वास्तव में यह जानवर है logging.getLevelName(logging.getLogger().getEffectiveLevel()):। जब आप चाहते हैं एक सरल वाक्यविन्यास करना अच्छा होगा, जो वर्तमान स्तर के लिए स्ट्रिंग है।
ट्रूटेन

स्तर पूर्णांक को नाम में परिवर्तित करने के लिए: docs.python.org/3/library/log.html#levels
EddyTheB

106

वास्तव में, एक बेहतर है: कोड का उपयोग करेंlogging.getLogger().isEnabledFor(logging.DEBUG) । मुझे यह समझने की कोशिश करते हुए मिला कि परिणाम के साथ क्या करना है getEffectiveLevel()

नीचे वह कोड है जिसे लॉगिंग मॉड्यूल स्वयं उपयोग करता है।

def getEffectiveLevel(self):
    """
    Get the effective level for this logger.

    Loop through this logger and its parents in the blogger hierarchy,
    looking for a non-zero logging level. Return the first one found. 
    """
    logger = self
    while logger:
        if logger.level:
            return logger.level
        logger = logger.parent
    return NOTSET

def isEnabledFor(self, level):
    """
    Is this logger enabled for level ‘level’?
    """
    if self.manager.disable >= level:
        return 0
    return level >= self.getEffectiveLevel()

4
यह स्वीकृत उत्तर होना चाहिए, क्योंकि यह कम रनटाइम जटिलता के साथ एक ही काम करता है।
एंडीजॉस्ट

1
यदि यह वास्तविक कोड होगा और छवि नहीं होगी। फिर भी: उत्थित।
कैसर

3

केवल

logging.getLogger().level == logging.DEBUG

यह प्रश्न का उत्तर प्रदान नहीं करता है। एक बार आपके पास पर्याप्त प्रतिष्ठा होने पर आप किसी भी पोस्ट पर टिप्पणी कर पाएंगे ; इसके बजाय, ऐसे उत्तर प्रदान करें जिन्हें पूछने वाले से स्पष्टीकरण की आवश्यकता न हो । - समीक्षा से
विनीथ साईं

@VineethSai, फिक्स्ड। धन्यवाद!
किलुंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.