Skip to main content

异常恢复

Recovery 中间件用于异常恢复,服务出现异常的情况下,防止程序直接退出。

配置#

Recovery 中间件中提供了两个配置方法 WithHandler()WithLogger()

WithHandler()#

func WithHandler(h HandlerFunc) Option {    return func(o *options) {        o.handler = h    }}

用于设置服务异常时可以使用自定义的 handler 进行处理,例如投递异常信息到 sentry。

WithLogger()#

func WithLogger(logger log.Logger) Option {    return func(o *options) {        o.logger = logger    }}

用于设置中间件打印日志时使用的 logger

使用方法#

http#

var opts = []http.ServerOption{    http.Middleware(        recovery.Recovery(      recovery.WithLogger(log.DefaultLogger),            recovery.WithHandler(func(ctx context.Context, req, err interface{}) error {                    // do someting                    return nil            }),    ),    ),}srv := http.NewServer(opts...)

grpc#

var opts = []grpc.ServerOption{    grpc.Middleware(        recovery.Recovery(            recovery.WithLogger(log.DefaultLogger),            recovery.WithHandler(func(ctx context.Context, req, err interface{}) error {                // do someting                return nil            }),        ),    ),}srv := grpc.NewServer(opts...)