मेरे पास एक बहुत ही सरल संरचना है। लेकिन मेरे दो लॉगिंग हैंडलर में से केवल एक मेरे मॉड्यूल से लॉगिंग कर रहा है:

Program.py, support_module1.py, support_module2.py

#program.py
import support_module1 as SM1
import support_module1 as SM2
log = logging.getLogger(__name__)
logging.basicConfig(
    filename='/logs/TestLog.log',
    filemode='w',
    level='DEBUG',
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
    handlers=[logging.FileHandler(r'/logs/TestLog.log')])
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setLevel(logging.INFO)
log.addHandler(stdout_handler)

log.debug("shows in file")
log.info("shows in file and in stdout")
SM1.function1()
SM2.function2()

मॉड्यूल

#support_module1.py
mod1_log = logging.getLogger(__name__)

function1():
    mod1_log.debug("shows in file")
    mod1_log.info("should show in file and in stdout, but only goes to file")


#support_module2.py
mod2_log = logging.getLogger(__name__)

function2():
    mod2_log.debug("shows in file")
    mod2_log.info("should show in file and in stdout, but only goes to file")

जब मैं दौड़ता हूं तो मुझे मिलता है:

shows in file and in stdout

मैं उम्मीद कर रहा हूँ:

shows in file and in stdout
should show in file and in stdout, but only goes to file
should show in file and in stdout, but only goes to file

कोई मुझे बताओ मैं गलत क्या कर रहा हूँ?

1
Drew Aschenbrener 30 नवम्बर 2018, 22:17

1 उत्तर

सबसे बढ़िया उत्तर

होफलिंग ने स्पष्ट रूप से समझाया कि क्यों और कैसे ठीक किया जाए। शुक्रिया!

Program.py में, आप logging.getLogger(name) को कॉन्फ़िगर कर रहे हैं। यह केवल program.py नाम के लकड़हारे को प्रभावित करेगा और इस प्रकार केवल program.py के अंदर ही लॉग रिकॉर्ड करेगा। मॉड्यूल1.py के अंदर लॉगिंग.getLogger(नाम) मॉड्यूल1.py नामक एक अलग लकड़हारा लौटाएगा, जो प्रोग्राम.py में कॉन्फ़िगरेशन से अप्रभावित है। फिक्स बहुत सरल है - logging.getLogger(नाम) के साथ program.py में logging.getLogger() कर सकते हैं। यह इसके बजाय रूट लॉगर को कॉन्फ़िगर करेगा। -होफलिंग

1
Drew Aschenbrener 3 पद 2018, 20:32