Skip to content

Commit 3e5f4c7

Browse files
committed
fix: encode error stack as base64 and improve error formatting
1 parent 403889a commit 3e5f4c7

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

assert/util.go

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
package assert
22

33
import (
4+
"encoding/base64"
45
"fmt"
56
"log/slog"
67
"reflect"
78
"runtime/debug"
89
"sync"
910

1011
"github.com/k0kubun/pp/v3"
11-
"github.com/pubgo/funk/log/logfields"
1212
"github.com/samber/lo"
13+
"google.golang.org/protobuf/encoding/prototext"
14+
"google.golang.org/protobuf/proto"
15+
16+
"github.com/pubgo/funk/log/logfields"
1317
)
1418

1519
func messageFromMsgAndArgs(msgAndArgs ...any) string {
@@ -34,7 +38,7 @@ func logErr(err error, message string, attrs ...slog.Attr) {
3438
attrs = append(attrs,
3539
slog.String(logfields.Module, "assert"),
3640
slog.String(logfields.Error, err.Error()),
37-
slog.String(logfields.ErrorStack, string(debug.Stack())),
41+
slog.String(logfields.ErrorStack, base64.StdEncoding.EncodeToString(debug.Stack())),
3842
slog.String(logfields.ErrorDetail, pretty().Sprint(err)),
3943
)
4044
slog.Error(message, lo.ToAnySlice(attrs)...)
@@ -45,14 +49,29 @@ func must(err error, messageArgs ...any) {
4549
return
4650
}
4751

52+
var attrs = []slog.Attr{slog.Bool("panic", true)}
53+
if v, ok := lo.ErrorsAs[interface {
54+
ID() string
55+
Error() string
56+
}](err); ok && v != nil {
57+
attrs = append(attrs, slog.String(logfields.ErrorID, v.ID()))
58+
}
59+
4860
message := messageFromMsgAndArgs(messageArgs...)
4961
if message == "" {
50-
message = err.Error()
62+
if v, ok := lo.ErrorsAs[interface {
63+
Proto() proto.Message
64+
Error() string
65+
}](err); ok && v != nil {
66+
message = fmt.Sprintf("%s\n%s", err.Error(), prototext.Format(v.Proto()))
67+
} else {
68+
message = err.Error()
69+
}
5170
} else {
5271
message = fmt.Sprintf("msg:%v err:%s", message, err.Error())
5372
}
5473

55-
logErr(err, message, slog.Bool("panic", true))
74+
logErr(err, message, attrs...)
5675
panic(err)
5776
}
5877

0 commit comments

Comments
 (0)