2016-02-28 7 views
5

पाइथन 3.2, logging.Logger.setLevel के रूप में एक पूर्णांक स्थिरांक के बजाय 'INFO' जैसे स्ट्रिंग स्तर को स्वीकार करता है। यह बहुत आसान है कि आप संख्यात्मक रूप से उस स्तर की तुलना नहीं कर सकते हैं और अधिकांश अन्य लॉगिंग विधियां केवल पूर्णांक स्वीकार करती हैं। logging पैकेज द्वारा प्रदान किए गए कार्यों का उपयोग करके मैं एक स्तर स्ट्रिंग को संख्यात्मक स्तर में कैसे परिवर्तित करूं?पाइथन लॉगिंग स्तर का नाम पूर्णांक कोड

>>> logging.???('INFO') == logging.INFO 
True 

उत्तर

7

कैसे की तरह

$ python 
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import logging 
>>> getattr(logging, 'INFO') 
20 
>>> getattr(logging, 'DEBUG') 
10 
>>> getattr(logging, 'ERROR') 
40 
>>> 
+0

यह वही है जो मैं ढूंढ रहा था। किसी भी लॉगर की स्थिति को संशोधित किए बिना एक प्रश्न। –

2

.level लॉगिंग घटना के संख्यात्मक स्तर देता है: विशेष रूप से, मैं कुछ है कि यह करता है चाहते हैं।

डेमो:

>>> logger = logging.getLogger() 
>>> logger.setLevel('INFO') 
>>> logger.level == logging.INFO 
True 
+1

यह बहुत उपयोगी है और मेरे शाब्दिक प्रश्न का उत्तर देता है। हालांकि, मैं लॉग स्तर को सेट किए बिना नंबर प्राप्त करने में सक्षम होना चाहता हूं। –

2

कुछ का उपयोग कर के बारे में logging मॉड्यूल कि यह कार्यक्षमता की अनुमति देने में विशेषताओं के एक जोड़े हैं। वे एक अंडरस्कोर, अंतर्निहित गोपनीयता के साथ prefixed हैं, तो उनका उपयोग करना एक अच्छा विचार नहीं है। हालांकि:

उच्चतम स्तर पर, वहाँ _checkLevel जो एक स्तर है कि या तो एक स्ट्रिंग या एक पूर्णांक है लेता है और या तो इसी मौजूदा स्तर देता है या एक ValueError को जन्म देती है।

_checkLevel शब्दकोश _nameToLevel को लपेटता है, जिसमें सभी पंजीकृत स्तर होते हैं (और addLevelName द्वारा अपडेट किया जाता है)।

_levelToName नामक एक अतिरिक्त सदस्य है, जिसमें रिवर्स मैपिंग शामिल है। यह getLevelName विधि के माध्यम से सार्वजनिक रूप से सुलभ है।

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