Browse Source

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

Avoids an obvious parsing ambiguity in log lines.
Jakob Borg 2 months ago
parent
commit
431da839cf
2 changed files with 3 additions and 1 deletions
  1. 1 1
      internal/slogutil/formatting.go
  2. 2 0
      internal/slogutil/formatting_test.go

+ 1 - 1
internal/slogutil/formatting.go

@@ -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 - 0
internal/slogutil/formatting_test.go

@@ -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)