处理异常的一个好方法是使用
Logger.exception
:
try:
do_something()
except BaseException:
logger.exception('some message')
...这不仅打印出用户消息,还打印出异常消息和异常类型,以及完整的堆栈跟踪。
我的记录器有两个处理程序:一个
FileHandler
和一个StreamHandler
.
使用colorlog根据不同级别为我的记录器输出着色,我可以看到在上述情况下,“一些消息”是根据记录器打印的(我相信级别
logging.ERROR
,即红色)......但是stacktrace 本身以普通控制台颜色打印。可能是stdout
,但更有可能是stderr
.
碰巧的是,在这种情况下,我希望将此堆栈跟踪完整地打印到我的记录器的文件处理程序,而不是打印到处理控制台输出的流处理程序:堆栈跟踪非常适合调试目的,但默认情况下用户不应该暴露在他们面前。
我查看了 StreamHandler 上的日志记录文档,但看不到一种方法来抑制给定此类处理程序的堆栈跟踪打印输出。