Skip to content

Commit 4d65bf7

Browse files
committed
Add a stacktrace-inducing template token
Having `err` objects respond to `%+v` is quite widespread within the golang ecosystem. Add a logger template unit supporting this behavior.
1 parent 226e4f0 commit 4d65bf7

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

Diff for: middleware/logger.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package middleware
33
import (
44
"bytes"
55
"encoding/json"
6+
"fmt"
67
"io"
78
"strconv"
89
"strings"
@@ -41,6 +42,7 @@ type (
4142
// - user_agent
4243
// - status
4344
// - error
45+
// - error_stacktrace (err passed through Sprintf's '%+v')
4446
// - latency (In nanoseconds)
4547
// - latency_human (Human readable)
4648
// - bytes_in (Bytes received)
@@ -198,8 +200,12 @@ func LoggerWithConfig(config LoggerConfig) echo.MiddlewareFunc {
198200
if err != nil {
199201
// Error may contain invalid JSON e.g. `"`
200202
b, _ := json.Marshal(err.Error())
201-
b = b[1 : len(b)-1]
202-
return buf.Write(b)
203+
return buf.Write(b[1 : len(b)-1])
204+
}
205+
case "error_stacktrace":
206+
if err != nil {
207+
b, _ := json.Marshal(fmt.Sprintf("%+v", err))
208+
return buf.Write(b[1 : len(b)-1])
203209
}
204210
case "latency":
205211
l := stop.Sub(start)

0 commit comments

Comments
 (0)