【问题标题】:How do I log an exception at warning- or info-level with traceback using the python logging framework?如何使用 python 日志框架在带有回溯的警告或信息级别记录异常?
【发布时间】:2010-09-16 13:48:59
【问题描述】:

使用这样的东西:

try:
   # Something...
except Exception as excep:
   logger = logging.getLogger("component")
   logger.warning("something raised an exception: " + excep)
   logger.info("something raised an exception: " + excep)

我宁愿不把它放在错误级别,因为在我的特殊情况下它不是错误。

【问题讨论】:

    标签: python exception logging


    【解决方案1】:

    你可以试试这个:

    from logging import getLogger
    
    logger = getLogger('warning')
    
    try:
        # Somethings that is wrong.
    
    except Exception as exp:
        logger.warning("something raised an exception: " , exc_info=True)
        logger.warning("something raised an exception: {}".format(exp))  # another way
    

    【讨论】:

    • IIRC,这些不会做同样的事情。第一种方式记录堆栈跟踪,第二种方式记录发生的异常的异常类的名称。那是非常不同的。
    • @BrianPeterson 问题的目的是打印exp。两个提到的记录器方法都实现了这一点。我现在测试了。
    【解决方案2】:

    来自logging documentation

    检查kwargs 中的三个关键字参数:exc_infostack_infoextra

    如果exc_info 的评估结果不为假,则会将异常信息添加到日志消息中。如果提供了异常元组(以sys.exc_info()返回的格式)或异常实例,则使用它;否则调用sys.exc_info()获取异常信息。

    这样做:

    logger.warning("something raised an exception:", exc_info=True)
    

    【讨论】:

    • 请注意,文档并没有明确提及此信息、警告、错误等。他们只是说“参数被解释为 debug()。” -- 这就是为什么如果您稍后需要返回此内容,您应该在此处查找有关此行为的上述描述。
    【解决方案3】:

    这是一个可行的方法(python 2.6.5)。

    logger.critical("caught exception, traceback =", exc_info=True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 2012-05-24
      相关资源
      最近更新 更多