【问题标题】:Python cross-module loggingPython 跨模块日志记录
【发布时间】:2011-09-03 15:50:47
【问题描述】:

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

# 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 工作正常。

        有什么想法吗?

        【问题讨论】:

          标签: python logging module


          【解决方案1】:

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

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

          【讨论】:

            猜你喜欢
            • 2017-07-28
            • 2013-03-30
            • 2017-06-04
            • 2011-11-29
            • 2021-11-23
            • 1970-01-01
            • 1970-01-01
            • 2020-08-11
            • 2015-01-13
            相关资源
            最近更新 更多