log: don't trim String in DEBUG,TRACE level

Signed-off-by: jsvisa <delweng@gmail.com>
This commit is contained in:
jsvisa 2025-06-17 14:33:42 +00:00
parent f745c529a2
commit 28db6533fa

View file

@ -90,7 +90,7 @@ func (h *TerminalHandler) formatAttributes(buf *bytes.Buffer, r slog.Record, col
buf.Write(appendEscapeString(buf.AvailableBuffer(), attr.Key)) buf.Write(appendEscapeString(buf.AvailableBuffer(), attr.Key))
buf.WriteByte('=') buf.WriteByte('=')
} }
val := FormatSlogValue(attr.Value, buf.AvailableBuffer()) val := FormatSlogValue(r.Level, attr.Value, buf.AvailableBuffer())
padding := h.fieldPadding[attr.Key] padding := h.fieldPadding[attr.Key]
@ -119,7 +119,7 @@ func (h *TerminalHandler) formatAttributes(buf *bytes.Buffer, r slog.Record, col
} }
// FormatSlogValue formats a slog.Value for serialization to terminal. // FormatSlogValue formats a slog.Value for serialization to terminal.
func FormatSlogValue(v slog.Value, tmp []byte) (result []byte) { func FormatSlogValue(lvl slog.Level, v slog.Value, tmp []byte) (result []byte) {
var value any var value any
defer func() { defer func() {
if err := recover(); err != nil { if err := recover(); err != nil {
@ -163,6 +163,12 @@ func FormatSlogValue(v slog.Value, tmp []byte) (result []byte) {
case error: case error:
return appendEscapeString(tmp, v.Error()) return appendEscapeString(tmp, v.Error())
case TerminalStringer: case TerminalStringer:
// For DEBUG and TRACE levels, use String() instead of TerminalString()
if lvl <= slog.LevelDebug {
if str, ok := v.(fmt.Stringer); ok {
return appendEscapeString(tmp, str.String())
}
}
return appendEscapeString(tmp, v.TerminalString()) return appendEscapeString(tmp, v.TerminalString())
case fmt.Stringer: case fmt.Stringer:
return appendEscapeString(tmp, v.String()) return appendEscapeString(tmp, v.String())