2011-09-03 19 views
6

मैं googled और डिफ़ॉल्ट प्रलेखन देखा है, लेकिन मैं समझ नहीं क्यों यह प्रवेश की तीन लाइनों का उत्पादन नहीं करता:अजगर पार मॉड्यूल प्रवेश

# main.py 
import logging 
import apple 
import banana 

log = logging.getLogger('main') 
log.setLevel(logging.DEBUG) 

ch = logging.StreamHandler() 
ch.setLevel(logging.DEBUG) 

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
ch.setFormatter(formatter) 

log.addHandler(ch) 

log.info("I'm in main!") 
    # apple.py 
    import logging 
    
    log = logging.getLogger('main.apple') 
    log.info("I'm here in apple!") 
    
      # banana.py 
      import logging 
      
      log = logging.getLogger('main.banana') 
      log.info("I'm here in banana!") 
      
        # output 
        2011-09-03 16:40:54,062 - main - INFO - I'm in main! 
        

        लेकिन example in the logging documentation ठीक काम करता है।

        कोई विचार?

        उत्तर

        9

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

        यदि मॉड्यूल में लॉगिंग स्टेटमेंट किसी वर्ग या फ़ंक्शन के अंदर रहते हैं, जैसा कि वे आपके द्वारा लिंक किए गए उदाहरण में करते हैं, तो आउटपुट देखा जा सकता है क्योंकि मॉड्यूल क्लास या फ़ंक्शन कहलाता है, हैंडलर रहा है लॉगर में जोड़ा गया।

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