44 "fmt"
55 "io"
66 "os"
7+ "slices"
78 "strings"
89 "sync"
910 "time"
@@ -12,10 +13,10 @@ import (
1213)
1314
1415type Logger struct {
15- defaultLogger * zerolog.Logger
16- scopeLoggers map [string ]* zerolog.Logger
17- scopeLevels map [string ]zerolog.Level
18- loggerMutex sync.Mutex
16+ baseLogger * zerolog.Logger
17+ scopeLoggers map [string ]* zerolog.Logger
18+ scopeLevels map [string ]zerolog.Level
19+ loggerMutex sync.Mutex
1920
2021 defaultLogLevelFromEnv zerolog.Level
2122 defaultLogLevelFromConfig zerolog.Level
@@ -46,14 +47,16 @@ func (w *logOutput) Write(p []byte) (n int, err error) {
4647}
4748
4849var (
50+ excludedFields = []string {"scope" , "component" , "subcomponent" }
51+ partsOrder = []string {"time" , "level" , "scope" , "component" , "subcomponent" , "message" }
4952 consoleLogOutput io.Writer = zerolog.ConsoleWriter {
5053 Out : os .Stdout ,
5154 TimeFormat : time .RFC3339 ,
52- PartsOrder : [] string { "time" , "level" , "scope" , "component" , "message" } ,
53- FieldsExclude : [] string { "scope" , "component" } ,
55+ PartsOrder : partsOrder ,
56+ FieldsExclude : excludedFields ,
5457 FormatPartValueByName : func (value any , name string ) string {
5558 val := fmt .Sprintf ("%s" , value )
56- if name == "component" {
59+ if slices . Contains ( excludedFields , name ) {
5760 if value == nil {
5861 return "-"
5962 }
8083
8184func NewLogger (zerologLogger zerolog.Logger ) * Logger {
8285 return & Logger {
83- defaultLogger : & zerologLogger ,
86+ baseLogger : & zerologLogger ,
8487 scopeLoggers : make (map [string ]* zerolog.Logger ),
8588 scopeLevels : make (map [string ]zerolog.Level ),
8689 loggerMutex : sync.Mutex {},
@@ -91,11 +94,8 @@ func NewLogger(zerologLogger zerolog.Logger) *Logger {
9194}
9295
9396func (l * Logger ) updateLogLevels (newConfigLevel zerolog.Level ) {
94- logger := l .defaultLogger .
95- Level (zerolog .InfoLevel ).
96- With ().
97- Interface ("newConfigLevel" , newConfigLevel ).
98- Logger ()
97+ logger := l .baseLogger .Level (zerolog .InfoLevel ).With ().Logger ()
98+ logger .Info ().Msgf ("updating log levels with new config level: %v" , newConfigLevel )
9999
100100 l .defaultLogLevelFromConfig = newConfigLevel
101101 l .scopeLevels = make (map [string ]zerolog.Level )
@@ -108,7 +108,7 @@ func (l *Logger) updateLogLevels(newConfigLevel zerolog.Level) {
108108 loopLogger := logger .With ().
109109 Str ("name" , name ).
110110 Str ("env" , env ).
111- Interface ("envLevel" , envLevel ).
111+ Stringer ("envLevel" , envLevel ).
112112 Logger ()
113113
114114 if env == "all" {
@@ -119,7 +119,12 @@ func (l *Logger) updateLogLevels(newConfigLevel zerolog.Level) {
119119 scopes := strings .SplitSeq (env , "," )
120120 for scope := range scopes {
121121 loopLogger .Info ().Msgf ("setting log level for scope %s from environment" , scope )
122- l .scopeLevels [scope ] = envLevel
122+
123+ if envLevel == unset {
124+ delete (l .scopeLevels , scope )
125+ } else {
126+ l .scopeLevels [scope ] = envLevel
127+ }
123128 }
124129 }
125130 }
@@ -172,7 +177,7 @@ func (l *Logger) getLogger(scope string) *zerolog.Logger {
172177 }
173178
174179 scopeLevel := l .getScopeLoggerLevel (scope )
175- logger := l .defaultLogger .Level (scopeLevel ).With ().Str ("component" , scope ).Logger ()
180+ logger := l .baseLogger .Level (scopeLevel ).With ().Str ("component" , scope ).Logger ()
176181 l .scopeLoggers [scope ] = & logger
177182 return & logger
178183}
@@ -181,7 +186,7 @@ func (l *Logger) UpdateConfigLogLevel(configDefaultLogLevel string) {
181186 var newConfigLevel zerolog.Level
182187
183188 configDefaultLogLevel = strings .ToUpper (configDefaultLogLevel )
184- loggingContext := l .defaultLogger .With ().Str ("configDefaultLogLevel" , configDefaultLogLevel )
189+ loggingContext := l .baseLogger .With ().Str ("configDefaultLogLevel" , configDefaultLogLevel )
185190 logger := loggingContext .Logger ()
186191
187192 if configDefaultLogLevel != "" {
0 commit comments