formatting_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // Copyright (C) 2025 The Syncthing Authors.
  2. //
  3. // This Source Code Form is subject to the terms of the Mozilla Public
  4. // License, v. 2.0. If a copy of the MPL was not distributed with this file,
  5. // You can obtain one at https://mozilla.org/MPL/2.0/.
  6. package slogutil
  7. import (
  8. "bytes"
  9. "log/slog"
  10. "strings"
  11. "testing"
  12. "time"
  13. )
  14. func TestFormattingHandler(t *testing.T) {
  15. buf := new(bytes.Buffer)
  16. h := &formattingHandler{
  17. out: buf,
  18. timeOverride: time.Unix(1234567890, 0).In(time.UTC),
  19. }
  20. l := slog.New(h).With("a", "a")
  21. l.Info("A basic info line", "attr1", "val with spaces", "attr2", 2, "attr3", `val"quote`)
  22. l.Info("An info line with grouped values", "attr1", "val1", slog.Group("foo", "attr2", 2, slog.Group("bar", "attr3", "3")))
  23. l2 := l.WithGroup("foo")
  24. l2.Info("An info line with grouped values via logger", "attr1", "val1", "attr2", 2)
  25. l3 := l2.WithGroup("bar")
  26. l3.Info("An info line with nested grouped values via logger", "attr1", "val1", "attr2", 2)
  27. l3.Debug("A debug entry")
  28. l3.Warn("A warning entry")
  29. l3.Error("An error")
  30. exp := `
  31. 2009-02-13 23:31:30 INF A basic info line (attr1="val with spaces" attr2=2 attr3="val\"quote" a=a log.pkg=slogutil)
  32. 2009-02-13 23:31:30 INF An info line with grouped values (attr1=val1 foo.attr2=2 foo.bar.attr3=3 a=a log.pkg=slogutil)
  33. 2009-02-13 23:31:30 INF An info line with grouped values via logger (foo.attr1=val1 foo.attr2=2 a=a log.pkg=slogutil)
  34. 2009-02-13 23:31:30 INF An info line with nested grouped values via logger (bar.foo.attr1=val1 bar.foo.attr2=2 a=a log.pkg=slogutil)
  35. 2009-02-13 23:31:30 WRN A warning entry (a=a log.pkg=slogutil)
  36. 2009-02-13 23:31:30 ERR An error (a=a log.pkg=slogutil)`
  37. if strings.TrimSpace(buf.String()) != strings.TrimSpace(exp) {
  38. t.Log(buf.String())
  39. t.Log(exp)
  40. t.Error("mismatch")
  41. }
  42. }