67 lines
1.9 KiB
Go
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
|
|
}
|
|
}
|