From 53b35d85de569e3e7e5425fd55385e3b8f0865e1 Mon Sep 17 00:00:00 2001 From: Craig Pastro Date: Fri, 8 Apr 2022 09:37:38 -0700 Subject: [PATCH 1/3] Add WithOptions to SugaredLogger --- sugar.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sugar.go b/sugar.go index 0b9651981..3b593533f 100644 --- a/sugar.go +++ b/sugar.go @@ -61,6 +61,16 @@ func (s *SugaredLogger) Named(name string) *SugaredLogger { return &SugaredLogger{base: s.base.Named(name)} } +// WithOptions clones the base Logger, applies the supplied Options, wraps +// the resulting Logger, and returns it. It's safe to use concurrently. +func (s *SugaredLogger) WithOptions(opts ...Option) *SugaredLogger { + base := s.base.clone() + for _, opt := range opts { + opt.apply(base) + } + return &SugaredLogger{base: base} +} + // With adds a variadic number of fields to the logging context. It accepts a // mix of strongly-typed Field objects and loosely-typed key-value pairs. When // processing pairs, the first element of the pair is used as the field key From 308dfc3dbfcf063a36198ca338c9f12c7e115ddc Mon Sep 17 00:00:00 2001 From: Craig Pastro Date: Fri, 8 Apr 2022 09:58:48 -0700 Subject: [PATCH 2/3] Add WithOptions test --- sugar_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/sugar_test.go b/sugar_test.go index 411759ad8..8cb0f9443 100644 --- a/sugar_test.go +++ b/sugar_test.go @@ -369,6 +369,22 @@ func TestSugarAddCallerFail(t *testing.T) { }) } +func TestSugarWithOptionsIncreaseLevel(t *testing.T) { + withSugar(t, DebugLevel, nil, func(logger *SugaredLogger, logs *observer.ObservedLogs) { + logger = logger.WithOptions(IncreaseLevel(WarnLevel)) + logger.Info("logger.Info") + logger.Warn("logger.Warn") + logger.Error("logger.Error") + require.Equal(t, 2, logs.Len(), "expected only warn + error logs due to IncreaseLevel.") + assert.Equal( + t, + logs.AllUntimed()[0].Message, + "logger.Warn", + "Expected first logged message to be warn level message", + ) + }) +} + func BenchmarkSugarSingleStrArg(b *testing.B) { withSugar(b, InfoLevel, nil /* opts* */, func(log *SugaredLogger, logs *observer.ObservedLogs) { for i := 0; i < b.N; i++ { From ee70d37b356b5b2671067fa43ac42b4b362aad82 Mon Sep 17 00:00:00 2001 From: Abhinav Gupta Date: Fri, 8 Apr 2022 10:06:24 -0700 Subject: [PATCH 3/3] Update sugar.go --- sugar.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sugar.go b/sugar.go index 3b593533f..4f9d491a0 100644 --- a/sugar.go +++ b/sugar.go @@ -61,8 +61,8 @@ func (s *SugaredLogger) Named(name string) *SugaredLogger { return &SugaredLogger{base: s.base.Named(name)} } -// WithOptions clones the base Logger, applies the supplied Options, wraps -// the resulting Logger, and returns it. It's safe to use concurrently. +// WithOptions clones the current SugaredLogger, applies the supplied Options, +// and returns the result. It's safe to use concurrently. func (s *SugaredLogger) WithOptions(opts ...Option) *SugaredLogger { base := s.base.clone() for _, opt := range opts {