schnutibox/vendor/github.com/philip-bui/grpc-zerolog/unary_interceptor.go
Marvin Preuss 63a16a3253
Some checks reported errors
continuous-integration/drone/push Build was killed
continuous-integration/drone Build was killed
modifies the command line interface handling / timer work
2021-08-09 10:49:04 +02:00

67 lines
1.9 KiB
Go

package zerolog
import (
"context"
"time"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"google.golang.org/grpc"
)
// UnaryInterceptor is a gRPC Server Option that uses NewUnaryServerInterceptor() to log gRPC Requests.
func UnaryInterceptor() grpc.ServerOption {
return grpc.UnaryInterceptor(NewUnaryServerInterceptor())
}
func UnaryInterceptorWithLogger(log *zerolog.Logger) grpc.ServerOption {
return grpc.UnaryInterceptor(NewUnaryServerInterceptorWithLogger(log))
}
// NewUnaryServerInterceptor that logs gRPC Requests using Zerolog.
// {
// ServiceField: "ExampleService",
// MethodField: "ExampleMethod",
// DurationField: 1.00
//
// IpField: "127.0.0.1",
//
// MetadataField: {},
//
// UserAgentField: "ExampleClientUserAgent",
// ReqField: {}, // JSON representation of Request Protobuf
//
// Err: "An unexpected error occurred",
// CodeField: "Unknown",
// MsgField: "Error message returned from the server",
// DetailsField: [Errors],
//
// RespField: {}, // JSON representation of Response Protobuf
//
// ZerologMessageField: "UnaryMessageDefault",
// }
func NewUnaryServerInterceptor() grpc.UnaryServerInterceptor {
return NewUnaryServerInterceptorWithLogger(&log.Logger)
}
func NewUnaryServerInterceptorWithLogger(log *zerolog.Logger) grpc.UnaryServerInterceptor {
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
now := time.Now()
resp, err := handler(ctx, req)
if log.Error().Enabled() {
if err != nil {
logger := log.Error()
LogIncomingCall(ctx, logger, info.FullMethod, now, req)
LogStatusError(logger, err)
logger.Msg(UnaryMessageDefault)
} else if log.Info().Enabled() {
logger := log.Info()
LogIncomingCall(ctx, logger, info.FullMethod, now, req)
LogResponse(logger, resp)
logger.Msg(UnaryMessageDefault)
}
}
return resp, err
}
}