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

配置

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

WithHandler()

  1. func WithHandler(h HandlerFunc) Option {
  2. return func(o *options) {
  3. o.handler = h
  4. }
  5. }

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

WithLogger()

  1. func WithLogger(logger log.Logger) Option {
  2. return func(o *options) {
  3. o.logger = logger
  4. }
  5. }

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

使用方法

http

  1. var opts = []http.ServerOption{
  2. http.Middleware(
  3. recovery.Recovery(
  4. recovery.WithLogger(log.DefaultLogger),
  5. recovery.WithHandler(func(ctx context.Context, req, err interface{}) error {
  6. // do someting
  7. return nil
  8. }),
  9. ),
  10. ),
  11. }
  12. srv := http.NewServer(opts...)

grpc

  1. var opts = []grpc.ServerOption{
  2. grpc.Middleware(
  3. recovery.Recovery(
  4. recovery.WithLogger(log.DefaultLogger),
  5. recovery.WithHandler(func(ctx context.Context, req, err interface{}) error {
  6. // do someting
  7. return nil
  8. }),
  9. ),
  10. ),
  11. }
  12. srv := grpc.NewServer(opts...)