2016-06-29 4 views
6

उद्देश्य:schedule को हर बार लॉग इन करने से रोकें।शेड्यूल लाइब्रेरी में लॉगिंग बंद करें

पृष्ठभूमि:

मैं एक अजगर परियोजना में logging और schedule लाइब्रेरी का उपयोग कर रहा हूँ।

मेरी लॉग फ़ाइल में रास्पबेरी पी द्वारा संचालित एक उपकरण की भौतिक स्थिति के बारे में जानकारी है, और हर 10 सेकंड में अपडेट किया जाता है।

मैं उस आवधिक लॉग को शेड्यूल करने के लिए schedule लाइब्रेरी का उपयोग करता हूं।

Here सीमित दस्तावेज है जो मैंने schedule के लिए पाया है।

समस्या:

schedule पुस्तकालय लॉग इस बयान, हर बार यह एक नौकरी से चलता है।

2016-06-29 09:01:51,022 INFO: Running job every 10 seconds do update_log() (Last run... 

समारोह है कि schedule कॉल update_log(), एक समारोह गणना करता है कि चर लॉग में शामिल मैं हर दस सेकंड चलाने के लिए और उन्हें (नीचे उदाहरण) लॉग है।

2016-06-29 09:01:51,022 INFO: Dist: 12.3 m Rate: 23.8 cm/s 

क्योंकि schedule अपने स्वयं के (काफी बेकार) लॉग लाइन का निर्माण किया जाता है, यह प्रवेश मैं वास्तव में बहुत पढ़ने के लिए मुश्किल करने के लिए कोशिश कर रहा हूँ बनाता है।

लक्ष्य:

रोकें schedule प्रवेश करने पहले बयान कि से।

+0

लॉग स्तर को INFO (चेतावनी) से एक से अधिक तक सेट करने और चेतावनी स्तर पर अपना लॉगिंग करने के बारे में आप क्या सोचते हैं? – bernie

+1

बीटीडब्ल्यू, मुझे 'शेड्यूल' मॉड्यूल पसंद है। – bernie

+0

इससे समस्या हल हो जाएगी, लेकिन यह एक समाधान की तुलना में एक बतख-टेप हैक की तरह लगता है। मैं उन घटनाओं के लिए भी चेतावनी का उपयोग करता हूं जो असामान्य हैं, लेकिन इतनी भयानक नहीं है कि प्रक्रिया को रोकें। –

उत्तर

5

schedule मॉड्यूल exclusively using the logger called schedule है। आप logging लाइब्रेरी का उपयोग disable this logger from writing to your main logger पर कर सकते हैं।

import logging 
logging.getLogger('schedule').propagate = False 

आप नहीं है schedule की लॉग बिल्कुल चाहते हैं, आप भी यह सेटिंग के आधार पर किसी भी असली लॉग स्तर से ऊपर अपने लॉग स्तर निष्क्रिय कर सकते हैं।

import logging 
logging.getLogger('schedule').setLevel(logging. CRITICAL + 10) 

python2.7 के बाद से, आप भी एक NullHandler बजाय उपयोग कर सकते हैं।

import logging 
logging.getLogger('schedule').propagate = False 
logging.getLogger('schedule').addHandler(logging.NullHandler()) 
+0

यह लॉग में शेड्यूल लाइन को अक्षम करने के लिए काम करता है, लेकिन मुझे प्रोग्राम की शुरुआत में एक बार चेतावनी "शेड्यूल" चेतावनी के लिए कोई हैंडलर नहीं मिला। –

+0

@ माइकलमोल्टर मैंने 'शेड्यूल' के लॉगिंग को पूरी तरह से अक्षम करने के तरीके के बारे में एक विवरण जोड़ा है। – MisterMiyagi

+1

मुझे व्यक्तिगत लॉगर्स की प्राथमिकता बदलने में सक्षम होने के बारे में पता नहीं था। मैंने चेतावनी को हटाने के लिए स्तर को 'logging.CRITICAL' पर सेट किया है और फिर भी गंभीर त्रुटियों को लॉग इन करने की अनुमति दी है। धन्यवाद! –

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