2009-12-31 9 views
55

अगर मैं इस तरह एक कमांड लाइन पैरामीटर के साथ डिबग करने के लिए प्रवेश मॉड्यूल सेट:यह निर्धारित करना कि रूट लॉगर पायथन में DEBUG स्तर पर सेट है या नहीं?

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

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

+0

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

उत्तर

69
logging.getLogger().getEffectiveLevel() 

logging.getLogger() बिना तर्क के रूट रूट लॉगर प्राप्त होता है।

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

+0

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

+1

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

57

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

(नीचे कोड है कि प्रवेश मॉड्यूल में ही उपयोग करता है की एक छवि है।)

logging code

+0

यह स्वीकार्य उत्तर होना चाहिए, क्योंकि यह कम रनटाइम जटिलता के साथ एक ही चीज़ करता है। – AndyJost

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