diff --git a/internal/log/grpc.go b/internal/log/grpc.go index b003049cb..7b130e88e 100644 --- a/internal/log/grpc.go +++ b/internal/log/grpc.go @@ -2,67 +2,103 @@ package log import ( "fmt" + "os" + "strconv" + "strings" "github.com/rs/zerolog" "google.golang.org/grpc/grpclog" ) func init() { - grpclog.SetLoggerV2(&grpcLogger{}) + var verbosityLevel int + if level, ok := os.LookupEnv("GRPC_GO_LOG_VERBOSITY_LEVEL"); ok { + verbosityLevel, _ = strconv.Atoi(level) // default is 0 + } + getLevel := GetLevel + // if the standard grpc severity level is set, it should take priority + if severity, ok := os.LookupEnv("GRPC_GO_LOG_SEVERITY_LEVEL"); ok { + var severityOverride zerolog.Level + if level, err := zerolog.ParseLevel(severity); err == nil { + severityOverride = level + } else { + // some non-standard but common values + switch strings.ToLower(strings.TrimSpace(severity)) { + case "off": + severityOverride = zerolog.Disabled + case "err": + severityOverride = zerolog.ErrorLevel + case "warning": // zerolog only recognizes "warn" + severityOverride = zerolog.WarnLevel + default: + severityOverride = zerolog.ErrorLevel + } + } + getLevel = func() zerolog.Level { + return severityOverride + } + } + grpclog.SetLoggerV2(&grpcLogger{ + verbosityLevel: verbosityLevel, + getLevel: getLevel, + }) } -type grpcLogger struct{} +type grpcLogger struct { + verbosityLevel int + getLevel func() zerolog.Level +} func (c *grpcLogger) Info(args ...any) { - if GetLevel() <= zerolog.DebugLevel { + if c.getLevel() <= zerolog.DebugLevel { Logger().Info().Msg(fmt.Sprint(args...)) } } func (c *grpcLogger) Infoln(args ...any) { - if GetLevel() <= zerolog.DebugLevel { + if c.getLevel() <= zerolog.DebugLevel { Logger().Info().Msg(fmt.Sprintln(args...)) } } func (c *grpcLogger) Infof(format string, args ...any) { - if GetLevel() <= zerolog.DebugLevel { + if c.getLevel() <= zerolog.DebugLevel { Logger().Info().Msg(fmt.Sprintf(format, args...)) } } func (c *grpcLogger) Warning(args ...any) { - if GetLevel() <= zerolog.DebugLevel { + if c.getLevel() <= zerolog.DebugLevel { Logger().Warn().Msg(fmt.Sprint(args...)) } } func (c *grpcLogger) Warningln(args ...any) { - if GetLevel() <= zerolog.DebugLevel { + if c.getLevel() <= zerolog.DebugLevel { Logger().Warn().Msg(fmt.Sprintln(args...)) } } func (c *grpcLogger) Warningf(format string, args ...any) { - if GetLevel() <= zerolog.DebugLevel { + if c.getLevel() <= zerolog.DebugLevel { Logger().Warn().Msg(fmt.Sprintf(format, args...)) } } func (c *grpcLogger) Error(args ...any) { - if GetLevel() <= zerolog.DebugLevel { + if c.getLevel() <= zerolog.DebugLevel { Logger().Error().Msg(fmt.Sprint(args...)) } } func (c *grpcLogger) Errorln(args ...any) { - if GetLevel() <= zerolog.DebugLevel { + if c.getLevel() <= zerolog.DebugLevel { Logger().Error().Msg(fmt.Sprintln(args...)) } } func (c *grpcLogger) Errorf(format string, args ...any) { - if GetLevel() <= zerolog.DebugLevel { + if c.getLevel() <= zerolog.DebugLevel { Logger().Error().Msg(fmt.Sprintf(format, args...)) } } @@ -79,6 +115,6 @@ func (c *grpcLogger) Fatalf(format string, args ...any) { Logger().Fatal().Msg(fmt.Sprintf(format, args...)) } -func (c *grpcLogger) V(int) bool { - return true +func (c *grpcLogger) V(l int) bool { + return l <= c.verbosityLevel }