...
1
2
3 package pkgerrors
4
5 import (
6 "bytes"
7 "regexp"
8 "testing"
9
10 "github.com/pkg/errors"
11 "github.com/rs/zerolog"
12 )
13
14 func TestLogStack(t *testing.T) {
15 zerolog.ErrorStackMarshaler = MarshalStack
16
17 out := &bytes.Buffer{}
18 log := zerolog.New(out)
19
20 err := errors.Wrap(errors.New("error message"), "from error")
21 log.Log().Stack().Err(err).Msg("")
22
23 got := out.String()
24 want := `\{"stack":\[\{"func":"TestLogStack","line":"20","source":"stacktrace_test.go"\},.*\],"error":"from error: error message"\}\n`
25 if ok, _ := regexp.MatchString(want, got); !ok {
26 t.Errorf("invalid log output:\ngot: %v\nwant: %v", got, want)
27 }
28 }
29
30 func TestLogStackFromContext(t *testing.T) {
31 zerolog.ErrorStackMarshaler = MarshalStack
32
33 out := &bytes.Buffer{}
34 log := zerolog.New(out).With().Stack().Logger()
35
36 err := errors.Wrap(errors.New("error message"), "from error")
37 log.Log().Err(err).Msg("")
38
39 got := out.String()
40 want := `\{"stack":\[\{"func":"TestLogStackFromContext","line":"36","source":"stacktrace_test.go"\},.*\],"error":"from error: error message"\}\n`
41 if ok, _ := regexp.MatchString(want, got); !ok {
42 t.Errorf("invalid log output:\ngot: %v\nwant: %v", got, want)
43 }
44 }
45
46 func BenchmarkLogStack(b *testing.B) {
47 zerolog.ErrorStackMarshaler = MarshalStack
48 out := &bytes.Buffer{}
49 log := zerolog.New(out)
50 err := errors.Wrap(errors.New("error message"), "from error")
51 b.ReportAllocs()
52
53 for i := 0; i < b.N; i++ {
54 log.Log().Stack().Err(err).Msg("")
55 out.Reset()
56 }
57 }
58
View as plain text