Skip to content

Commit a69048a

Browse files
authored
Fix: log context (#20)
1 parent e0c5645 commit a69048a

File tree

5 files changed

+58
-19
lines changed

5 files changed

+58
-19
lines changed

errors/z_code_test.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,22 @@ import (
44
"fmt"
55
"testing"
66

7-
"github.com/rs/xid"
8-
97
"github.com/pubgo/funk/errors"
108
"github.com/pubgo/funk/proto/errorpb"
119
"github.com/pubgo/funk/version"
10+
"github.com/rs/xid"
11+
"github.com/stretchr/testify/assert"
1212
)
1313

14+
func TestWrapCaller(t *testing.T) {
15+
err := fmt.Errorf("test")
16+
var ff = func() error {
17+
return errors.WrapCaller(err, 1)
18+
}
19+
20+
assert.Contains(t, fmt.Sprint(ff()), "z_code_test.go:21 TestWrapCaller")
21+
}
22+
1423
func TestCodeErr(t *testing.T) {
1524
err := errors.NewCodeErr(&errorpb.ErrCode{
1625
StatusCode: errorpb.Code_Aborted,

log/aaa.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,16 @@ import (
66
"github.com/rs/zerolog"
77
)
88

9+
const (
10+
ModuleName = "module"
11+
)
12+
913
type (
1014
Map = map[string]any
1115
Hook = zerolog.Hook
1216
Event = zerolog.Event
1317
Level = zerolog.Level
14-
EnableChecker = func(ctx context.Context, lvl Level, name string, fields Map) bool
18+
EnableChecker = func(ctx context.Context, lvl Level, nameOrMessage string, fields Map) bool
1519
)
1620

1721
type Logger interface {

log/global.go

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,21 @@ import (
1616
)
1717

1818
var (
19-
logEnableChecker = func(context.Context, Level, string, Map) bool { return true }
19+
logEnableChecker = func(ctx context.Context, lvl Level, nameOrMessage string, fields Map) bool { return true }
2020
zErrMarshalFunc = zerolog.ErrorMarshalFunc
2121
zInterfaceMarshalFunc = zerolog.InterfaceMarshalFunc
22-
_ = generic.Init(func() {
22+
logGlobalHook = zerolog.HookFunc(func(e *zerolog.Event, level zerolog.Level, message string) {
23+
if logEnableChecker == nil {
24+
return
25+
}
26+
27+
if logEnableChecker(e.GetCtx(), level, message, nil) {
28+
return
29+
}
30+
31+
e.Discard()
32+
})
33+
_ = generic.Init(func() {
2334
zerolog.SetGlobalLevel(zerolog.DebugLevel)
2435
zerolog.ErrorMarshalFunc = func(err error) interface{} {
2536
if err == nil {
@@ -59,12 +70,14 @@ var (
5970

6071
// stdZeroLog default zerolog for debug
6172
stdZeroLog = generic.Ptr(
62-
zerolog.New(os.Stderr).Level(zerolog.DebugLevel).
63-
With().Timestamp().Caller().Logger().
73+
zerolog.New(os.Stderr).
74+
Level(zerolog.DebugLevel).
75+
With().Timestamp().
76+
Caller().Logger().
6477
Output(zerolog.NewConsoleWriter(func(w *zerolog.ConsoleWriter) {
6578
w.Out = os.Stderr
6679
w.TimeFormat = time.RFC3339
67-
})).Hook(new(hookImpl)),
80+
})).Hook(new(hookImpl), logGlobalHook),
6881
)
6982

7083
_ = generic.Init(func() {
@@ -83,6 +96,9 @@ func GetLogger(name string) Logger {
8396
// SetLogger set global log
8497
func SetLogger(log *zerolog.Logger) {
8598
assert.If(log == nil, "[log] should not be nil")
99+
100+
log = generic.Ptr(log.Hook(logGlobalHook))
101+
86102
stdZeroLog = log
87103
zlog.Logger = *log
88104
}

log/impl.log.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7+
"strings"
78

9+
"github.com/pubgo/funk/stack"
810
"github.com/rs/zerolog"
911
)
1012

@@ -47,11 +49,18 @@ func (l *loggerImpl) WithCallerSkip(skip int) Logger {
4749
}
4850

4951
func (l *loggerImpl) WithName(name string) Logger {
52+
name = strings.TrimSpace(name)
5053
if name == "" {
5154
return l
5255
}
5356

5457
log := l.copy()
58+
if log.fields == nil {
59+
log.fields = Map{ModuleName: stack.Caller(1).Pkg}
60+
} else {
61+
log.fields[ModuleName] = stack.Caller(1).Pkg
62+
}
63+
5564
if log.name == "" {
5665
log.name = name
5766
} else {

result/result.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding/json"
55
"fmt"
66

7+
"github.com/pubgo/funk/errors"
78
"github.com/pubgo/funk/generic"
89
"github.com/pubgo/funk/stack"
910
)
@@ -35,15 +36,15 @@ func OK[T any](v T) Result[T] {
3536
}
3637

3738
func Err[T any](err error) Result[T] {
38-
return Result[T]{e: err}
39+
return Result[T]{e: errors.WrapCaller(err, 1)}
3940
}
4041

4142
func Wrap[T any](v T, err error) Result[T] {
42-
return Result[T]{v: &v, e: err}
43+
return Result[T]{v: &v, e: errors.WrapCaller(err, 1)}
4344
}
4445

4546
func Of[T any](v T, err error) Result[T] {
46-
return Result[T]{v: &v, e: err}
47+
return Result[T]{v: &v, e: errors.WrapCaller(err, 1)}
4748
}
4849

4950
type Result[T any] struct {
@@ -52,7 +53,7 @@ type Result[T any] struct {
5253
}
5354

5455
func (r Result[T]) WithErr(err error) Result[T] {
55-
return Err[T](err)
56+
return Result[T]{e: errors.WrapCaller(err, 1)}
5657
}
5758

5859
func (r Result[T]) WithVal(v T) Result[T] {
@@ -61,7 +62,7 @@ func (r Result[T]) WithVal(v T) Result[T] {
6162

6263
func (r Result[T]) ValueTo(v *T) error {
6364
if r.IsErr() {
64-
return r.e
65+
return errors.WrapCaller(r.e)
6566
}
6667

6768
*v = generic.FromPtr(r.v)
@@ -73,7 +74,7 @@ func (r Result[T]) OnValue(fn func(t T) error) error {
7374
return r.e
7475
}
7576

76-
return fn(generic.FromPtr(r.v))
77+
return errors.WrapCaller(fn(generic.FromPtr(r.v)), 1)
7778
}
7879

7980
func (r Result[T]) Err(check ...func(err error) error) error {
@@ -82,10 +83,10 @@ func (r Result[T]) Err(check ...func(err error) error) error {
8283
}
8384

8485
if len(check) > 0 && check[0] != nil {
85-
return check[0](r.e)
86+
return errors.WrapCaller(check[0](r.e))
8687
}
8788

88-
return r.e
89+
return errors.WrapCaller(r.e)
8990
}
9091

9192
func (r Result[T]) IsErr() bool {
@@ -124,15 +125,15 @@ func (r Result[T]) Expect(format string, args ...any) T {
124125

125126
func (r Result[T]) String() string {
126127
if !r.IsErr() {
127-
return fmt.Sprintf("%v", *r.v)
128+
return fmt.Sprintf("%v", generic.FromPtr(r.v))
128129
}
129130

130-
return r.e.Error()
131+
return fmt.Sprint(errors.WrapCaller(r.e, 1))
131132
}
132133

133134
func (r Result[T]) MarshalJSON() ([]byte, error) {
134135
if r.IsErr() {
135-
return nil, r.e
136+
return nil, errors.WrapCaller(r.e, 1)
136137
}
137138

138139
return json.Marshal(generic.FromPtr(r.v))

0 commit comments

Comments
 (0)