Python跨模块日志记录

Log*_*ead 6 python logging module

我用Google搜索并查看了默认文档,但我无法弄清楚为什么这不会产生三行日志记录:

# 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!")
Run Code Online (Sandbox Code Playgroud)
    # apple.py
    import logging
    
    log = logging.getLogger('main.apple')
    log.info("I'm here in apple!")
    
    Run Code Online (Sandbox Code Playgroud)
      # banana.py
      import logging
      
      log = logging.getLogger('main.banana')
      log.info("I'm here in banana!")
      
      Run Code Online (Sandbox Code Playgroud)
        # output
        2011-09-03 16:40:54,062 - main - INFO - I'm in main!
        
        Run Code Online (Sandbox Code Playgroud)

        但是日志文档中示例运行正常.

        有任何想法吗?

        unu*_*tbu 9

        StreamHandler在导入之后才设置handler().因此,导入模块中的日志记录命令不会产生任何输出.一些处理程序打印到文件,其他处理程序通过网络进行通信,一些处理程序打印到控制台.如果没有将处理程序添加到记录器中,导入模块中的日志记录语句就无法知道该怎么做.

        如果模块中的日志记录语句驻留在类或函数中,就像它们链接到的示例中那样,那么可以看到输出,因为在调用模块类或函数时,处理程序已添加到记录器中.