如何使用 python 日志框架在带有回溯的警告或信息级别记录异常?
Posted
技术标签:
【中文标题】如何使用 python 日志框架在带有回溯的警告或信息级别记录异常?【英文标题】:How do I log an exception at warning- or info-level with traceback using the python logging framework? 【发布时间】: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)
我宁愿不把它放在错误级别,因为在我的特殊情况下它不是错误。
【问题讨论】:
【参考方案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_info
、stack_info
和extra
。如果
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)
【讨论】:
以上是关于如何使用 python 日志框架在带有回溯的警告或信息级别记录异常?的主要内容,如果未能解决你的问题,请参考以下文章