11package assert
22
33import (
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
1519func 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