@@ -53,6 +53,9 @@ func FromContextOrGlobal(ctx context.Context) logr.Logger {
5353// New returns a new logger. The level may be "DEBUG" (V(1)) or "TRACE" (V(2)),
5454// any other string (e.g. "") is interpreted as "INFO" (V(0)). On first call
5555// the global Logger is set.
56+ // The log level is stored in a package-level (global) variable. Any call to
57+ // New(...) updates this shared log level for all loggers, including the
58+ // initially created global Logger.
5659func New (name , level string ) logr.Logger {
5760 logger := newLogger (level ).WithName (name )
5861 once .Do (func () { Logger = logger })
@@ -160,8 +163,12 @@ func setLogLevelByName(level string) {
160163
161164 levelMu .Lock ()
162165 defer levelMu .Unlock ()
163- currentLevel = level
164- atomicLevel .SetLevel (zapcore .Level (lvl ))
166+ if currentLevel != level {
167+ Logger .WithValues ("logger" , "setLogLevelByName" ).
168+ Info (fmt .Sprintf ("Changing log level to '%s' from '%s'" , level , currentLevel ))
169+ currentLevel = level
170+ atomicLevel .SetLevel (zapcore .Level (lvl ))
171+ }
165172}
166173
167174type Option func (level string )
@@ -215,13 +222,6 @@ func SetupLevelChangeOnSignal(ctx context.Context, signals map[os.Signal]string,
215222 return
216223 case sig := <- sigChannel :
217224 levelStr := signals [sig ]
218- if levelStr == currentLevel {
219- FromContextOrGlobal (ctx ).WithValues ("logger" , "SetupLevelChangeOnSignal" ).
220- Info (fmt .Sprintf ("Received signal %s but log level is already '%s'; no change" , sig , levelStr ))
221- continue
222- }
223- FromContextOrGlobal (ctx ).WithValues ("logger" , "SetupLevelChangeOnSignal" ).
224- Info (fmt .Sprintf ("Setting log level to '%s'" , levelStr ))
225225 setLogLevelByName (levelStr )
226226 for _ , opt := range opts {
227227 opt (levelStr )
0 commit comments