【问题标题】:Enabling debug logging in Python在 Python 中启用调试日志记录
【发布时间】:2018-10-25 08:29:26
【问题描述】:

鉴于此代码,我尝试让日志语句正常工作,但我无法做到。文档告诉我,我不必设置级别。

创建记录器时,级别设置为 NOTSET(这会导致所有 当记录器是根记录器时要处理的消息,或者 当记录器是非根记录器时委托给父级)。

但没有它就行不通。因此我尝试将其设置为调试。但仍然没有运气。

"""
Experimental Port Fowarding
"""
import logging

def main(config):
    """ entry point"""

    log = logging.getLogger(__name__)
    log.setLevel(logging.DEBUG)

    log.debug("opening config file...")
    config_file = open(config, 'r')
    log.debug("config found!")

【问题讨论】:

  • 有一个完整的例子很有用。如果这是您的整个程序,那么您看不到输出的原因是因为您没有调用 main
  • 我通过 REPL 调用它。实际上文件上的循环只缺少print(line)。

标签: python debugging logging


【解决方案1】:

您得到的记录器没有任何处理程序。您可以通过 print(log.handlers) 进行检查,然后看到输出是一个空列表 ([])。

使用日志库的最简单方法是这样的,您可以调用logging.basicConfig 来设置所有内容,如logging module basic tutorial 所示:

"""
Experimental Port Fowarding
"""
import logging

logging.basicConfig(level=logging.DEBUG)

def main(config):
    """ entry point"""

    logging.debug("opening config file...")
    config_file = open(config, 'r')
    logging.debug("config found!")

main('test.conf')

这适用于我在 IPython 的外部和内部。

如果你想避免 basicConfig 出于某种原因你需要手动注册一个处理程序,像这样:

import logging

def main(config):
    """ entry point"""

    log = logging.getLogger(__name__)
    log.setLevel(logging.DEBUG)
    # Minimal change: add StreamHandler to display to stdout
    log.addHandler(logging.StreamHandler())

    log.debug("opening config file...")
    config_file = open(config, 'r')
    log.debug("config found!")

【讨论】:

    【解决方案2】:

    默认情况下,记录器写入 STDERR 流,该流通常会打印到控制台本身。
    基本上你可以通过设置来改变日志文件路径:

    logging.basicConfig(filename="YourFileName.log")
    log = logging.getLogger(__name__)
    

    【讨论】:

      猜你喜欢
      • 2014-11-02
      • 1970-01-01
      • 2014-02-28
      • 2011-01-23
      • 2016-12-06
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多