52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
package grpc
|
|
|
|
import (
|
|
"context"
|
|
|
|
grpclogging "github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/logging"
|
|
"github.com/rs/zerolog"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
// A grpc logging middleware compatible logger
|
|
// implementation using a zerolog logger, either from
|
|
// the global logger or a context logger
|
|
type GRPCLogger struct {
|
|
logger zerolog.Logger
|
|
}
|
|
|
|
// Returns a grpcLogger using the global zerolog Logger
|
|
func NewGRPCLogger() *GRPCLogger {
|
|
return &GRPCLogger{logger: log.Logger}
|
|
}
|
|
|
|
// Returns a grpcLogger using the zerolog logger in the provided context
|
|
func NewGRPCContextLogger(ctx context.Context) *GRPCLogger {
|
|
logger := log.Ctx(ctx)
|
|
return &GRPCLogger{logger: *logger}
|
|
}
|
|
|
|
// Log logs the fields for given log level. We can assume users (middleware library) will put fields in pairs and
|
|
// those will be unique.
|
|
func (l *GRPCLogger) Log(ctx context.Context, level grpclogging.Level, msg string, fields ...any) {
|
|
var event *zerolog.Event
|
|
|
|
switch level {
|
|
case grpclogging.LevelDebug:
|
|
event = l.logger.Debug()
|
|
case grpclogging.LevelInfo:
|
|
event = l.logger.Info()
|
|
case grpclogging.LevelWarn:
|
|
event = l.logger.Warn()
|
|
case grpclogging.LevelError:
|
|
event = l.logger.Error()
|
|
default:
|
|
event = l.logger.Warn().
|
|
Int("unknowngrpcloglevel", int(level))
|
|
}
|
|
|
|
event.Ctx(ctx)
|
|
event.Fields(fields)
|
|
event.Msg(msg)
|
|
}
|