go-app/pkg/srv/grpc/grpc_logger.go

52 lines
1.3 KiB
Go
Raw Normal View History

2025-03-07 11:16:32 -05:00
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)
}