目录

go recover 之后打印 panic 的调用栈

打印 recover 的 panic 调用栈

在很多场景下,我们都需要对 panic 进行 recover 捕获,然后 recover 捕获后打印的日志是没有堆栈信息的,非常不利于问题排查,

可以用 runtime.Stack 实现堆栈打印

func main(){
  defer func() {
        if rec := recover(); rec != nil {
            buf := make([]byte, 1<<16)
            runtime.Stack(buf, true)
            log..Errorln("recover success") // 这里替换成自己的 log 
            log.Errorf("recover ", string(buf)) // 这里替换成自己的 log
        }
    }()
  panic("test err")
}

参考资料

Go 语言 panic recover 实战指南