fix(slogutil): quote values with parentheses in them (#10229)

Avoids an obvious parsing ambiguity in log lines.
This commit is contained in:
Jakob Borg
2025-08-07 09:47:50 +00:00
committed by GitHub
parent 836045ee87
commit 431da839cf
2 changed files with 3 additions and 1 deletions
+1 -1
View File
@@ -127,7 +127,7 @@ func appendAttr(sb *strings.Builder, prefix string, a slog.Attr, attrCount *int)
sb.WriteString(a.Key) sb.WriteString(a.Key)
sb.WriteRune('=') sb.WriteRune('=')
v := a.Value.Resolve().String() v := a.Value.Resolve().String()
if strings.ContainsAny(v, ` "`) { if strings.ContainsAny(v, ` "()`) {
v = strconv.Quote(v) v = strconv.Quote(v)
} }
sb.WriteString(v) sb.WriteString(v)
+2
View File
@@ -23,6 +23,7 @@ func TestFormattingHandler(t *testing.T) {
l := slog.New(h).With("a", "a") l := slog.New(h).With("a", "a")
l.Info("A basic info line", "attr1", "val with spaces", "attr2", 2, "attr3", `val"quote`) l.Info("A basic info line", "attr1", "val with spaces", "attr2", 2, "attr3", `val"quote`)
l.Info("A basic info line", "attr1", "paren)thesis")
l.Info("An info line with grouped values", "attr1", "val1", slog.Group("foo", "attr2", 2, slog.Group("bar", "attr3", "3"))) l.Info("An info line with grouped values", "attr1", "val1", slog.Group("foo", "attr2", 2, slog.Group("bar", "attr3", "3")))
l2 := l.WithGroup("foo") l2 := l.WithGroup("foo")
@@ -37,6 +38,7 @@ func TestFormattingHandler(t *testing.T) {
exp := ` exp := `
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) 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)
2009-02-13 23:31:30 INF A basic info line (attr1="paren)thesis" a=a log.pkg=slogutil)
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) 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)
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) 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)
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) 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)