From fa2ee830c22d1019be9a53bded03b447628a737a Mon Sep 17 00:00:00 2001 From: Tim Ross Date: Mon, 6 Jan 2025 12:44:29 -0500 Subject: [PATCH] Prevent quoting debug reports The refactoring done in #50451 caused the trace.Error debug report to be quoted in log output. This updates the quoting bypass used for log level to also consider trace.Errors in order to restore the previous output. --- lib/utils/log/handle_state.go | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/lib/utils/log/handle_state.go b/lib/utils/log/handle_state.go index c60132b28e48e..c8ac9913781ca 100644 --- a/lib/utils/log/handle_state.go +++ b/lib/utils/log/handle_state.go @@ -125,11 +125,13 @@ func (s *handleState) appendAttr(a slog.Attr) bool { } // Handle special cases before formatting. + var traceError bool if a.Value.Kind() == slog.KindAny { switch v := a.Value.Any().(type) { case *slog.Source: a.Value = slog.StringValue(fmt.Sprintf(" %s:%d", v.File, v.Line)) case trace.Error: + traceError = true a.Value = slog.StringValue("[" + v.DebugReport() + "]") case error: a.Value = slog.StringValue(fmt.Sprintf("[%v]", v)) @@ -161,18 +163,11 @@ func (s *handleState) appendAttr(a slog.Attr) bool { return true } - if a.Value.Kind() == slog.KindString && a.Key != slog.LevelKey { - val := a.Value.String() - if needsQuoting(val) { - a.Value = slog.StringValue(strconv.Quote(val)) - } - } - s.appendKey(a.Key) - // Write the log key directly to avoid quoting - // color formatting that exists. - if a.Key == slog.LevelKey { + // Write the level key to avoid quoting color formatting that exists or + // [trace.Error]s so that the debug report is output in it's entirety. + if traceError || a.Key == slog.LevelKey { s.buf.WriteString(a.Value.String()) } else { s.appendValue(a.Value)