提问人:mike rodent 提问时间:4/16/2023 最后编辑:Vinay Sajipmike rodent 更新时间:4/18/2023 访问量:123
使用 logger.exception 抑制/重定向堆栈跟踪打印输出?
Suppress/redirect stack trace print out with logger.exception?
问:
处理异常的一个好方法是使用:Logger.exception
try:
do_something()
except BaseException:
logger.exception('some message')
...这不仅会打印出用户消息,还会打印出异常消息和异常类型,以及完整的堆栈跟踪。
我的记录器有两个处理程序:a 和 a .FileHandler
StreamHandler
使用 colorlog 根据不同的级别为我的记录器输出着色,我可以看到在上面的情况下,根据记录器打印了“一些消息”(我相信级别,即红色)......但堆栈跟踪本身是以普通的控制台颜色打印的。它可能是 ,但更有可能是 。logging.ERROR
stdout
stderr
碰巧的是,我希望在这种情况下将此堆栈跟踪完整打印到我的记录器的文件处理程序中,而不是打印到处理控制台输出的流处理程序中:堆栈跟踪非常适合调试目的,但默认情况下,用户不应暴露于它们。
我查看了 StreamHandler 上的日志记录文档,但看不到抑制给定此类处理程序的堆栈跟踪打印输出的方法。
答:
-1赞
Vinay Sajip
4/18/2023
#1
要禁止特定处理程序的堆栈跟踪,请将格式化程序附加到该处理程序,该处理程序返回堆栈跟踪的空字符串。请参阅我对另一个问题的相关答案 - 该答案将堆栈跟踪格式化为一行,但您应该能够扩展那里提出的想法。
评论
except BaseException as e:
e
logger.error
logger.exception
logging
except SomeException as e:
e
e
INFO
WARN
logging.exception
logger.exception
StreamHandler