Python跨模块日志记录

6

我已经谷歌搜索并查看了默认文档,但我无法弄清楚为什么这不会产生三行日志:

# 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!
        

        但是日志文档中的示例可以正常工作。
        有什么想法吗?
        1个回答

        9
        处理程序(StreamHandler)在导入模块之后才被设置。因此,导入的模块中的日志命令不会产生任何输出。有些处理程序打印到文件,有些通过网络通信,而有些打印到控制台上。如果没有将处理程序添加到记录器中,导入模块内部的日志语句无法知道该执行什么操作。
        如果模块中的日志语句位于类或函数内部(就像您提供的示例一样),那么由于该模块的类或函数被调用时,处理程序已被添加到记录器中,因此可以看到输出结果。

        网页内容由stack overflow 提供, 点击上面的
        可以查看英文原文,
        原文链接