package middleware import ( "context" "runtime/debug" "speech-nlu-parse/global" "speech-nlu-parse/pkg/logger" "google.golang.org/grpc" ) // StreamGSError500 捕捉流式代码致命错误 func StreamGSError500() grpc.StreamServerInterceptor { return func(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) (err error) { defer func() { if err := recover(); err != nil { //打印错误堆栈信息 // global.Logger.WithFields(logger.Fields{}).Panicf("panic: %v", err) global.Logger.Panicf("panic: %v, stack: %v", err, string(debug.Stack())) } }() return handler(srv, stream) } } // UnaryGSError500 捕捉简单代码致命错误 func UnaryGSError500() grpc.UnaryServerInterceptor { return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (_ interface{}, err error) { defer func() { if err := recover(); err != nil { //打印错误堆栈信息 global.Logger.WithFields(logger.Fields{"request": req}).Panicf("panic: %v, stack: %v", err, string(debug.Stack())) } }() return handler(ctx, req) } }