आज मैं एक पायथन परियोजना के बारे में सोच रहा था जिसे मैंने एक साल पहले लिखा था, जहां मैंने logging
का उपयोग बड़े पैमाने पर किया था। मुझे लगता है कि ओवरहेड (hotshot
संकेत दिया गया है कि यह मेरी सबसे बड़ी बाधाओं में से एक था) के भीतर आंतरिक-लूप-जैसी परिदृश्यों (90% कोड) में बहुत से लॉगिंग कॉल पर टिप्पणी करना है।मैं उन्हें बिना टिप्पणी किए पाइथन लॉगिंग कॉल कैसे रोक सकता हूं?
मैं अब आश्चर्य हो, तो कुछ विहित रास्ता प्रोग्राम के रूप में टिप्पणी और हर समय uncommenting बिना पायथन अनुप्रयोगों में प्रवेश कॉल बाहर पट्टी। मैं आप इस और लक्ष्य केवल कोड वस्तुओं है कि बाधाओं उत्पन्न कर रहे हैं की तरह कुछ करने के लिए निरीक्षण/रखता या बाईटकोड हेरफेर इस्तेमाल कर सकते हैं लगता है कि। इस तरह, आप एक के बाद संकलन कदम के रूप में एक जोड़तोड़ जोड़ सकते हैं और एक केंद्रीकृत विन्यास फाइल का उपयोग करें, तो जैसे:
[Leave ERROR and above]
my_module.SomeClass.method_with_lots_of_warn_calls
[Leave WARN and above]
my_module.SomeOtherClass.method_with_lots_of_info_calls
[Leave INFO and above]
my_module.SomeWeirdClass.method_with_lots_of_debug_calls
बेशक
, आप इसे किफ़ायत से और शायद का उपयोग करने के साथ प्रति-समारोह के विवरण का स्तर चाहते हैं - केवल कोड ऑब्जेक्ट्स के लिए जिन्होंने logging
को एक बाधा बनने के लिए दिखाया है। किसी को इस तरह कुछ पता है?
नोट: कुछ चीजें है कि गतिशील टाइपिंग और लेट बाइंडिंग के कारण इस और अधिक कठिन एक performant ढंग से करने के लिए कर रहे हैं। उदाहरण के लिए, debug
नामक विधि के लिए किसी भी कॉल को if not isinstance(log, Logger)
से लपेटा जाना पड़ सकता है। किसी भी मामले में, मुझे लगता है कि सभी मामूली विवरणों को दूर किया जा सकता है, या तो सज्जन के समझौते या कुछ रन-टाइम जांच द्वारा। :-)
आप एक ही रूट स्तर लकड़हारा का उपयोग करें? यानी, logging.getLogger()? यदि ऐसा है, तो आपको पहले इसे ठीक करने की आवश्यकता है। यदि नहीं, तो कृपया उन मॉड्यूल में कुछ getLogger कॉल प्रदान करें। –
@ एसएलओटी: मैं प्रति-मॉड्यूल आधार पर LOG = logging.getLogger (__ name__) का उपयोग करता हूं, फिर LOG.debug (msg) और जैसा कॉल करता हूं। मैं वास्तव में नहीं देखता कि यह कैसे प्रासंगिक है, हालांकि। – cdleary