Add support for using the standard grpc env vars to control log severity and verbosity (#5120)

This commit is contained in:
Joe Kralicky 2024-05-31 14:06:38 -04:00 committed by GitHub
parent de603f87de
commit d859e884c0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -2,67 +2,103 @@ package log
import ( import (
"fmt" "fmt"
"os"
"strconv"
"strings"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"google.golang.org/grpc/grpclog" "google.golang.org/grpc/grpclog"
) )
func init() { 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) { func (c *grpcLogger) Info(args ...any) {
if GetLevel() <= zerolog.DebugLevel { if c.getLevel() <= zerolog.DebugLevel {
Logger().Info().Msg(fmt.Sprint(args...)) Logger().Info().Msg(fmt.Sprint(args...))
} }
} }
func (c *grpcLogger) Infoln(args ...any) { func (c *grpcLogger) Infoln(args ...any) {
if GetLevel() <= zerolog.DebugLevel { if c.getLevel() <= zerolog.DebugLevel {
Logger().Info().Msg(fmt.Sprintln(args...)) Logger().Info().Msg(fmt.Sprintln(args...))
} }
} }
func (c *grpcLogger) Infof(format string, args ...any) { func (c *grpcLogger) Infof(format string, args ...any) {
if GetLevel() <= zerolog.DebugLevel { if c.getLevel() <= zerolog.DebugLevel {
Logger().Info().Msg(fmt.Sprintf(format, args...)) Logger().Info().Msg(fmt.Sprintf(format, args...))
} }
} }
func (c *grpcLogger) Warning(args ...any) { func (c *grpcLogger) Warning(args ...any) {
if GetLevel() <= zerolog.DebugLevel { if c.getLevel() <= zerolog.DebugLevel {
Logger().Warn().Msg(fmt.Sprint(args...)) Logger().Warn().Msg(fmt.Sprint(args...))
} }
} }
func (c *grpcLogger) Warningln(args ...any) { func (c *grpcLogger) Warningln(args ...any) {
if GetLevel() <= zerolog.DebugLevel { if c.getLevel() <= zerolog.DebugLevel {
Logger().Warn().Msg(fmt.Sprintln(args...)) Logger().Warn().Msg(fmt.Sprintln(args...))
} }
} }
func (c *grpcLogger) Warningf(format string, args ...any) { func (c *grpcLogger) Warningf(format string, args ...any) {
if GetLevel() <= zerolog.DebugLevel { if c.getLevel() <= zerolog.DebugLevel {
Logger().Warn().Msg(fmt.Sprintf(format, args...)) Logger().Warn().Msg(fmt.Sprintf(format, args...))
} }
} }
func (c *grpcLogger) Error(args ...any) { func (c *grpcLogger) Error(args ...any) {
if GetLevel() <= zerolog.DebugLevel { if c.getLevel() <= zerolog.DebugLevel {
Logger().Error().Msg(fmt.Sprint(args...)) Logger().Error().Msg(fmt.Sprint(args...))
} }
} }
func (c *grpcLogger) Errorln(args ...any) { func (c *grpcLogger) Errorln(args ...any) {
if GetLevel() <= zerolog.DebugLevel { if c.getLevel() <= zerolog.DebugLevel {
Logger().Error().Msg(fmt.Sprintln(args...)) Logger().Error().Msg(fmt.Sprintln(args...))
} }
} }
func (c *grpcLogger) Errorf(format string, args ...any) { func (c *grpcLogger) Errorf(format string, args ...any) {
if GetLevel() <= zerolog.DebugLevel { if c.getLevel() <= zerolog.DebugLevel {
Logger().Error().Msg(fmt.Sprintf(format, args...)) 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...)) Logger().Fatal().Msg(fmt.Sprintf(format, args...))
} }
func (c *grpcLogger) V(int) bool { func (c *grpcLogger) V(l int) bool {
return true return l <= c.verbosityLevel
} }