Skip to content

Commit 71b7e86

Browse files
authored
fix: ensure we recognize errors as slog.AnyValue (#171)
We need to type check any value to see if it is an error. While doing so, we also need to check if it doesn't have a json.Marshaler interface to avoid overwriting the error message with the marshaled value. Fixes: #170
1 parent 0e0124d commit 71b7e86

File tree

4 files changed

+18
-1
lines changed

4 files changed

+18
-1
lines changed

json.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,13 @@ func (l *Logger) writeSlogValue(jw *jsonWriter, v slogValue) {
8888
}
8989
jw.end()
9090
default:
91-
jw.objectValue(v.Any())
91+
a := v.Any()
92+
_, jm := a.(json.Marshaler)
93+
if err, ok := a.(error); ok && !jm {
94+
jw.objectValue(err.Error())
95+
} else {
96+
jw.objectValue(a)
97+
}
9298
}
9399
}
94100

json_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,13 @@ func TestJson(t *testing.T) {
113113
kvs: []interface{}{"map", map[string]string{"a": "b", "foo": "bar"}},
114114
f: l.Info,
115115
},
116+
{
117+
name: "slog any value error type",
118+
expected: "{\"level\":\"info\",\"msg\":\"info\",\"error\":\"error message\"}\n",
119+
msg: "info",
120+
kvs: []interface{}{"error", slogAnyValue(fmt.Errorf("error message"))},
121+
f: l.Info,
122+
},
116123
}
117124
for _, c := range cases {
118125
buf.Reset()

logger_121.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ type (
1717
slogLogValuer = slog.LogValuer
1818
)
1919

20+
var slogAnyValue = slog.AnyValue
21+
2022
const slogKindGroup = slog.KindGroup
2123

2224
// Enabled reports whether the logger is enabled for the given level.

logger_no121.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ type (
1818
slogLogValuer = slog.LogValuer
1919
)
2020

21+
var slogAnyValue = slog.AnyValue
22+
2123
const slogKindGroup = slog.KindGroup
2224

2325
// Enabled reports whether the logger is enabled for the given level.

0 commit comments

Comments
 (0)