From d72548d82f5f6ecd0bf0e5f8d1b9146c22adfcd6 Mon Sep 17 00:00:00 2001 From: Craig Pastro Date: Wed, 22 Jun 2022 14:07:38 -0700 Subject: [PATCH 1/3] Logger: add Log method --- logger.go | 8 ++++++++ logger_test.go | 29 +++++++++++++++++++++++++++++ sugar.go | 8 ++------ 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/logger.go b/logger.go index e1a9ff78a..6bb992450 100644 --- a/logger.go +++ b/logger.go @@ -190,6 +190,14 @@ func (log *Logger) Check(lvl zapcore.Level, msg string) *zapcore.CheckedEntry { return log.check(lvl, msg) } +// Log logs a message at the specified level. The message includes any fields +// passed at the log site, as well as any fields accumulated on the logger. +func (log *Logger) Log(lvl zapcore.Level, msg string, fields ...Field) { + if ce := log.check(lvl, msg); ce != nil { + ce.Write(fields...) + } +} + // Debug logs a message at DebugLevel. The message includes any fields passed // at the log site, as well as any fields accumulated on the logger. func (log *Logger) Debug(msg string, fields ...Field) { diff --git a/logger_test.go b/logger_test.go index 58b756a56..47c2b16b5 100644 --- a/logger_test.go +++ b/logger_test.go @@ -120,6 +120,7 @@ func TestLoggerLogPanic(t *testing.T) { expected string }{ {func(logger *Logger) { logger.Check(PanicLevel, "bar").Write() }, true, "bar"}, + {func(logger *Logger) { logger.Log(PanicLevel, "baz") }, true, "baz"}, {func(logger *Logger) { logger.Panic("baz") }, true, "baz"}, } { withLogger(t, DebugLevel, nil, func(logger *Logger, logs *observer.ObservedLogs) { @@ -148,6 +149,7 @@ func TestLoggerLogFatal(t *testing.T) { expected string }{ {func(logger *Logger) { logger.Check(FatalLevel, "bar").Write() }, "bar"}, + {func(logger *Logger) { logger.Log(FatalLevel, "bar") }, "bar"}, {func(logger *Logger) { logger.Fatal("baz") }, "baz"}, } { withLogger(t, DebugLevel, nil, func(logger *Logger, logs *observer.ObservedLogs) { @@ -194,12 +196,36 @@ func TestLoggerLeveledMethods(t *testing.T) { }) } +func TestLoggerLogLevels(t *testing.T) { + withLogger(t, DebugLevel, nil, func(logger *Logger, logs *observer.ObservedLogs) { + levels := []zapcore.Level{ + DebugLevel, + InfoLevel, + WarnLevel, + ErrorLevel, + DPanicLevel, + } + for i, level := range levels { + logger.Log(level, "") + output := logs.AllUntimed() + assert.Equal(t, i+1, len(output), "Unexpected number of logs.") + assert.Equal(t, 0, len(output[i].Context), "Unexpected context on first log.") + assert.Equal( + t, + zapcore.Entry{Level: level}, + output[i].Entry, + "Unexpected output from %s-level logger method.", level) + } + }) +} + func TestLoggerAlwaysPanics(t *testing.T) { // Users can disable writing out panic-level logs, but calls to logger.Panic() // should still call panic(). withLogger(t, FatalLevel, nil, func(logger *Logger, logs *observer.ObservedLogs) { msg := "Even if output is disabled, logger.Panic should always panic." assert.Panics(t, func() { logger.Panic("foo") }, msg) + assert.Panics(t, func() { logger.Log(PanicLevel, "foo") }, msg) assert.Panics(t, func() { if ce := logger.Check(PanicLevel, "foo"); ce != nil { ce.Write() @@ -216,6 +242,9 @@ func TestLoggerAlwaysFatals(t *testing.T) { stub := exit.WithStub(func() { logger.Fatal("") }) assert.True(t, stub.Exited, "Expected calls to logger.Fatal to terminate process.") + stub = exit.WithStub(func() { logger.Log(FatalLevel, "") }) + assert.True(t, stub.Exited, "Expected calls to logger.Fatal to terminate process.") + stub = exit.WithStub(func() { if ce := logger.Check(FatalLevel, ""); ce != nil { ce.Write() diff --git a/sugar.go b/sugar.go index cb5c6dd97..c2f327970 100644 --- a/sugar.go +++ b/sugar.go @@ -279,9 +279,7 @@ func (s *SugaredLogger) log(lvl zapcore.Level, template string, fmtArgs []interf } msg := getMessage(template, fmtArgs) - if ce := s.base.Check(lvl, msg); ce != nil { - ce.Write(s.sweetenFields(context)...) - } + s.base.Log(lvl, msg, s.sweetenFields(context)...) } // logln message with Sprintln @@ -291,9 +289,7 @@ func (s *SugaredLogger) logln(lvl zapcore.Level, template string, fmtArgs []inte } msg := getMessageln(fmtArgs) - if ce := s.base.Check(lvl, msg); ce != nil { - ce.Write(s.sweetenFields(context)...) - } + s.base.Log(lvl, msg, s.sweetenFields(context)...) } // getMessage format with Sprint, Sprintf, or neither. From 1aff26265637b5310fbd6e13978e01152881b415 Mon Sep 17 00:00:00 2001 From: Craig Pastro Date: Wed, 22 Jun 2022 14:10:45 -0700 Subject: [PATCH 2/3] Some renaming --- logger_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/logger_test.go b/logger_test.go index 47c2b16b5..063d5dd16 100644 --- a/logger_test.go +++ b/logger_test.go @@ -119,8 +119,8 @@ func TestLoggerLogPanic(t *testing.T) { should bool expected string }{ - {func(logger *Logger) { logger.Check(PanicLevel, "bar").Write() }, true, "bar"}, - {func(logger *Logger) { logger.Log(PanicLevel, "baz") }, true, "baz"}, + {func(logger *Logger) { logger.Check(PanicLevel, "foo").Write() }, true, "foo"}, + {func(logger *Logger) { logger.Log(PanicLevel, "bar") }, true, "bar"}, {func(logger *Logger) { logger.Panic("baz") }, true, "baz"}, } { withLogger(t, DebugLevel, nil, func(logger *Logger, logs *observer.ObservedLogs) { @@ -148,7 +148,7 @@ func TestLoggerLogFatal(t *testing.T) { do func(*Logger) expected string }{ - {func(logger *Logger) { logger.Check(FatalLevel, "bar").Write() }, "bar"}, + {func(logger *Logger) { logger.Check(FatalLevel, "foo").Write() }, "foo"}, {func(logger *Logger) { logger.Log(FatalLevel, "bar") }, "bar"}, {func(logger *Logger) { logger.Fatal("baz") }, "baz"}, } { From e25b3df5681bdce4af9e338ee06987b1a66a6014 Mon Sep 17 00:00:00 2001 From: Craig Pastro Date: Wed, 22 Jun 2022 14:18:53 -0700 Subject: [PATCH 3/3] revert sugar changes --- sugar.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sugar.go b/sugar.go index c2f327970..cb5c6dd97 100644 --- a/sugar.go +++ b/sugar.go @@ -279,7 +279,9 @@ func (s *SugaredLogger) log(lvl zapcore.Level, template string, fmtArgs []interf } msg := getMessage(template, fmtArgs) - s.base.Log(lvl, msg, s.sweetenFields(context)...) + if ce := s.base.Check(lvl, msg); ce != nil { + ce.Write(s.sweetenFields(context)...) + } } // logln message with Sprintln @@ -289,7 +291,9 @@ func (s *SugaredLogger) logln(lvl zapcore.Level, template string, fmtArgs []inte } msg := getMessageln(fmtArgs) - s.base.Log(lvl, msg, s.sweetenFields(context)...) + if ce := s.base.Check(lvl, msg); ce != nil { + ce.Write(s.sweetenFields(context)...) + } } // getMessage format with Sprint, Sprintf, or neither.