...

Source file src/github.com/grpc-ecosystem/go-grpc-middleware/recovery/examples_test.go

Documentation: github.com/grpc-ecosystem/go-grpc-middleware/recovery

     1  // Copyright 2017 David Ackroyd. All Rights Reserved.
     2  // See LICENSE for licensing terms.
     3  
     4  package grpc_recovery_test
     5  
     6  import (
     7  	"github.com/grpc-ecosystem/go-grpc-middleware"
     8  	"github.com/grpc-ecosystem/go-grpc-middleware/recovery"
     9  	"google.golang.org/grpc"
    10  	"google.golang.org/grpc/codes"
    11  	"google.golang.org/grpc/status"
    12  )
    13  
    14  var (
    15  	customFunc grpc_recovery.RecoveryHandlerFunc
    16  )
    17  
    18  // Initialization shows an initialization sequence with a custom recovery handler func.
    19  func Example_initialization() {
    20  	// Define customfunc to handle panic
    21  	customFunc = func(p interface{}) (err error) {
    22  		return status.Errorf(codes.Unknown, "panic triggered: %v", p)
    23  	}
    24  	// Shared options for the logger, with a custom gRPC code to log level function.
    25  	opts := []grpc_recovery.Option{
    26  		grpc_recovery.WithRecoveryHandler(customFunc),
    27  	}
    28  	// Create a server. Recovery handlers should typically be last in the chain so that other middleware
    29  	// (e.g. logging) can operate on the recovered state instead of being directly affected by any panic
    30  	_ = grpc.NewServer(
    31  		grpc_middleware.WithUnaryServerChain(
    32  			grpc_recovery.UnaryServerInterceptor(opts...),
    33  		),
    34  		grpc_middleware.WithStreamServerChain(
    35  			grpc_recovery.StreamServerInterceptor(opts...),
    36  		),
    37  	)
    38  }
    39  

View as plain text