]> Cypherpunks.ru repositories - gostls13.git/blobdiff - src/log/slog/logger_test.go
log/slog: add LogLoggerLevel to enable setting level on the default logger
[gostls13.git] / src / log / slog / logger_test.go
index 88aa38ee0c973ba8c1aafdeecba5c60daf9c7d69..bb1c8a16ea46ac4b988c9a0ab27645f7e8c93440 100644 (file)
@@ -191,6 +191,7 @@ func TestCallDepth(t *testing.T) {
                }
        }
 
+       defer SetDefault(Default()) // restore
        logger := New(h)
        SetDefault(logger)
 
@@ -363,6 +364,71 @@ func TestSetDefault(t *testing.T) {
        }
 }
 
+// Test defaultHandler minimum level without calling slog.SetDefault.
+func TestLogLoggerLevelForDefaultHandler(t *testing.T) {
+       // Revert any changes to the default logger, flags, and level of log and slog.
+       currentLogLoggerLevel := logLoggerLevel.Level()
+       currentLogWriter := log.Writer()
+       currentLogFlags := log.Flags()
+       t.Cleanup(func() {
+               logLoggerLevel.Set(currentLogLoggerLevel)
+               log.SetOutput(currentLogWriter)
+               log.SetFlags(currentLogFlags)
+       })
+
+       var logBuf bytes.Buffer
+       log.SetOutput(&logBuf)
+       log.SetFlags(0)
+
+       for _, test := range []struct {
+               logLevel Level
+               logFn    func(string, ...any)
+               want     string
+       }{
+               {LevelDebug, Debug, "DEBUG a"},
+               {LevelDebug, Info, "INFO a"},
+               {LevelInfo, Debug, ""},
+               {LevelInfo, Info, "INFO a"},
+       } {
+               SetLogLoggerLevel(test.logLevel)
+               test.logFn("a")
+               checkLogOutput(t, logBuf.String(), test.want)
+               logBuf.Reset()
+       }
+}
+
+// Test handlerWriter minimum level by calling slog.SetDefault.
+func TestLogLoggerLevelForHandlerWriter(t *testing.T) {
+       removeTime := func(_ []string, a Attr) Attr {
+               if a.Key == TimeKey {
+                       return Attr{}
+               }
+               return a
+       }
+
+       // Revert any changes to the default logger. This is important because other
+       // tests might change the default logger using SetDefault. Also ensure we
+       // restore the default logger at the end of the test.
+       currentLogger := Default()
+       currentLogLoggerLevel := logLoggerLevel.Level()
+       currentLogWriter := log.Writer()
+       currentFlags := log.Flags()
+       t.Cleanup(func() {
+               SetDefault(currentLogger)
+               logLoggerLevel.Set(currentLogLoggerLevel)
+               log.SetOutput(currentLogWriter)
+               log.SetFlags(currentFlags)
+       })
+
+       var logBuf bytes.Buffer
+       log.SetOutput(&logBuf)
+       log.SetFlags(0)
+       SetLogLoggerLevel(LevelError)
+       SetDefault(New(NewTextHandler(&logBuf, &HandlerOptions{ReplaceAttr: removeTime})))
+       log.Print("error")
+       checkLogOutput(t, logBuf.String(), `level=ERROR msg=error`)
+}
+
 func TestLoggerError(t *testing.T) {
        var buf bytes.Buffer