package rpcserver import ( "context" "github.com/pkg/errors" "github.com/zeromicro/go-zero/core/logx" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "live-service/common/nerr" ) // LoggerInterceptor grpc logger拦截器 // see github.com\zeromicro\go-zero\zrpc\server.go#AddUnaryInterceptors // see google.golang.org\grpc\interceptor.go func LoggerInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) { resp, err = handler(ctx, req) if err != nil { // 解析自定义err类型,给予友好提示 cause := errors.Cause(err) if e, ok := cause.(*nerr.Error); ok { logx.WithContext(ctx).Errorf("[RPC-SRV-ERROR] %+v", err) // 转换err err = status.Error(codes.Code(e.Code), e.Msg) } else { logx.WithContext(ctx).Errorf("[RPC-SRV-ERROR] %+v", err) } } return }