2011-07-11 14 views
14

में प्रदर्शित मैं पाइथन में logging मॉड्यूल का उपयोग डीबग और त्रुटि संदेशों को लिखने के लिए कर रहा हूं।फाइलहैंडर के लिए अलग-अलग लॉगिंग स्तर और पायथन

मैं logging.DEBUG या उससे अधिक के सभी संदेशों को फाइल करने के लिए लिखना चाहता हूं।

हालांकि, मैं केवल logging.WARNING या उससे अधिक के स्क्रीन संदेशों पर प्रिंट करना चाहता हूं।

क्या यह संभवतः एक Logger और एक FileHandler का उपयोग कर संभव है?

उत्तर

12

जैसा कि उल्लेख किया गया है, हैंडलर बनाने के लिए इतना आसान हैं और जोड़ते हैं कि आप शायद दो हैंडलर का उपयोग कर बेहतर हैं। यदि, हालांकि, किसी कारण से आप एक से चिपकना चाहते हैं, तो Python logging cookbook में एक सेक्शन है जो आप करना चाहते हैं कम से कम वर्णन करना: कंसोल और फ़ाइल दोनों पर लॉगिंग करना, लेकिन विभिन्न स्तरों पर (यह आपको विभिन्न प्रारूपण करने का तरीका भी दिखाता है)। यह एक StreamHandler बल्कि एक FileHandler से साथ यह होता है, हालांकि:

import logging 

# set up logging to file - see previous section for more details 
logging.basicConfig(level=logging.DEBUG, 
        format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', 
        datefmt='%m-%d %H:%M', 
        filename='/temp/myapp.log', 
        filemode='w') 
# define a Handler which writes INFO messages or higher to the sys.stderr 
console = logging.StreamHandler() 
console.setLevel(logging.INFO) 
# set a format which is simpler for console use 
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') 
# tell the handler to use this format 
console.setFormatter(formatter) 
# add the handler to the root logger 
logging.getLogger('').addHandler(console) 

# Now, we can log to the root logger, or any other logger. First the root... 
logging.info('Jackdaws love my big sphinx of quartz.') 

# Now, define a couple of other loggers which might represent areas in your 
# application: 

logger1 = logging.getLogger('myapp.area1') 
logger2 = logging.getLogger('myapp.area2') 

logger1.debug('Quick zephyrs blow, vexing daft Jim.') 
logger1.info('How quickly daft jumping zebras vex.') 
logger2.warning('Jail zesty vixen who grabbed pay from quack.') 
logger2.error('The five boxing wizards jump quickly.') 

संपादित करें: टिप्पणियाँ इस कोड को अभी भी दो संचालकों को बनाने वाला चर्चा की, लेकिन "खाल" basicConfig के उपयोग के माध्यम से एक निर्माण के रूप में() । मैं आपको दृढ़ता से दोनों को बनाने के लिए दृढ़ता से प्रोत्साहित करता हूं।

+0

यह अभी भी दो हैंडलर है। केवल 'basicHonfig (...)' के साथ 'FileHandler' के निर्माण को "मुखौटा" किया गया है, मैं उन्हें स्पष्ट रूप से दोनों बनाऊंगा। – plundra

+0

आप बिल्कुल सही हैं। हालांकि, मुझे लगता है कि यह (या इसी तरह) पूछताछकर्ता के मन में था जब उसने कहा था कि वह केवल दो लॉगर के साथ दो स्थानों पर आउटपुट कर रहा था। मुझे आपके साथ अपने अन्य बिंदु पर भी सहमत होना है: यह स्पष्ट रूप से आईएमओ दोनों हैंडलर घोषित करने के लिए बहुत स्पष्ट और साफ है। – bdeniker

2

नहीं। फ़ाइल और स्क्रीन आउटपुट का मतलब है कि आपको दो हैंडलर चाहिए।

+0

एक हैंडलर के साथ, यह वर्तमान में फ़ाइल और स्क्रीन दोनों को लिख रहा है। लेकिन दोनों एक ही स्तर पर (logging.DEBUG)। – cssndrx

+0

@cssndrx: "एक हैंडलर, यह वर्तमान में फाइल और स्क्रीन दोनों को लिख रहा है।" मुझे समझना मुश्किल लगता है। लॉग इन कॉन्फ़िगरेशन को शामिल करने के लिए कृपया ** प्रश्न ** अपडेट करें जिसका उपयोग आप इसे करने के लिए कर रहे हैं। –

+0

@ एरिक्सन: कई चीजें "की जा सकती हैं"। हमें यह देखने की ज़रूरत है कि वे वास्तव में ** क्या कर रहे हैं। –

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