से नीचे के स्तर के संदेश प्रसारित करना, मैं एक विशिष्ट लॉगजर नाम के संदेशों को एक निश्चित स्तर और उच्च (INFO
और ऊपर) को एक विशिष्ट लॉग हैंडलर पर लॉग करना चाहता हूं, एक फ़ाइल हैंडलर कहें, अभी भी कंसोल पर सभी लॉग संदेश प्राप्त करना। पायथन संस्करण 2.7 है।पायथन लॉगिंग: वर्तमान लॉगर स्तर
क्या मैं अब तक की कोशिश की दो वालों को बनाने के लिए किया गया था:
- किसी रूट लकड़हारा
- एक नामित लकड़हारा
जड़ लकड़हारा के लिए, मैं एक logging.StreamHandler
संलग्न है, और लॉग सेट स्तर logging.DEBUG
।
तो मुझे लगता है कि लकड़हारा के लिए logging.INFO
करने के लिए नामित लकड़हारा और निर्धारित स्तर के लिए एक हैंडलर संलग्न।
जब मैं अपने मॉड्यूल है, जो नामित लकड़हारा का उपयोग करता है कहते हैं, मैं DEBUG
लॉग किसी भी अधिक जड़ लकड़हारा को प्रचारित नहीं मिलता है।
नोट: अतिरिक्त लॉगर में समस्या का प्रदर्शन करने के लिए स्ट्रीमहैंडलर है। मेरी उत्पादन कोड में मैं एक FileHandler प्रयोग करेंगे
import logging
def do_logging(turn):
logger = logging.getLogger('extra')
logger.info('some info turn %d' % turn)
logger.debug('this is debug fudge turn %d' % turn)
rootLogger = logging.getLogger()
handler = logging.StreamHandler()
rootFormatter = logging.Formatter('root - %(levelname)s: %(msg)s')
handler.setFormatter(rootFormatter)
rootLogger.addHandler(handler)
rootLogger.setLevel(logging.DEBUG)
do_logging(1)
extraLogger = logging.getLogger('extra')
extraHandler = logging.StreamHandler()
extraFormatter = logging.Formatter('extra - %(levelname)s: %(msg)s')
extraHandler.setFormatter(extraFormatter)
extraLogger.addHandler(extraHandler)
extraLogger.setLevel(logging.INFO)
do_logging(2)
वास्तविक आउटपुट:
root - INFO: some info turn 1
root - DEBUG: this is debug fudge turn 1
extra - INFO: some info turn 2
root - INFO: some info turn 2
आउटपुट है कि मैं करना चाहते हैं के लिए:
root - INFO: some info turn 1
root - DEBUG: this is debug fudge turn 1
extra - INFO: some info turn 2
root - INFO: some info turn 2
root - DEBUG: this is debug fudge turn 2
मुझे लगता है कि एक कस्टम Filter
इस मामले में सहायक होगा, लेकिन मुझे नहीं पता कि कैसे ...
ठीक काम करता है, बहुत बहुत धन्यवाद। एक लॉगर के बाद लगता है कि नंगे स्तर तंत्र के आधार पर लॉग प्रविष्टियों को छोड़ देता है, यह अब उन्हें प्रचारित नहीं करता है। यहां यह लॉग स्तर को कम करके सेट किया गया है, लेकिन वांछित स्तर के केवल लॉग संदेश, जो निचले स्तर के प्रचार की लॉग प्रविष्टियों को देता है। – trapicki
हाँ, यह सही है। दस्तावेज़ों में एक अच्छा प्रवाह चार्ट है (http://docs.python.org/2/howto/logging.html#logging-flow) जो सही मानसिक मॉडल सेट करता है। आप रिकॉर्डर को अस्वीकार करने के लिए लॉगर से फ़िल्टर नहीं चाहते हैं क्योंकि यह कभी भी प्रचार चरण तक नहीं पहुंचता है। – unutbu
ओह, एक हैंडलर या लॉगर से फ़िल्टर संलग्न होने पर एक बड़ा अंतर है ... _handler उप-चार्ट_ भ्रामक लगता है: _Stop_ प्रसंस्करण को रोक नहीं पाएगा, बस कुछ हैंडल किए बिना उस हैंडलर से वापस लौटें, और प्रवाह चालू होगा अगली हैंडलर, या मैं गलत हूँ, @unutbu? – trapicki