1 package logrus_test
2
3 import (
4 "bytes"
5 "encoding/json"
6 "errors"
7 "strings"
8 "testing"
9
10 log "github.com/go-kit/kit/log/logrus"
11 "github.com/sirupsen/logrus"
12 )
13
14 func TestLogrusLogger(t *testing.T) {
15 t.Parallel()
16 buf := &bytes.Buffer{}
17 logrusLogger := logrus.New()
18 logrusLogger.Out = buf
19 logrusLogger.Formatter = &logrus.TextFormatter{TimestampFormat: "02-01-2006 15:04:05", FullTimestamp: true}
20 logger := log.NewLogger(logrusLogger)
21
22 if err := logger.Log("hello", "world"); err != nil {
23 t.Fatal(err)
24 }
25 if want, have := "hello=world\n", strings.Split(buf.String(), " ")[3]; want != have {
26 t.Errorf("want %#v, have %#v", want, have)
27 }
28
29 buf.Reset()
30 if err := logger.Log("a", 1, "err", errors.New("error")); err != nil {
31 t.Fatal(err)
32 }
33 if want, have := "a=1 err=error", strings.TrimSpace(strings.SplitAfterN(buf.String(), " ", 4)[3]); want != have {
34 t.Errorf("want %#v, have %#v", want, have)
35 }
36
37 buf.Reset()
38 if err := logger.Log("a", 1, "b"); err != nil {
39 t.Fatal(err)
40 }
41 if want, have := "a=1 b=\"(MISSING)\"", strings.TrimSpace(strings.SplitAfterN(buf.String(), " ", 4)[3]); want != have {
42 t.Errorf("want %#v, have %#v", want, have)
43 }
44
45 buf.Reset()
46 if err := logger.Log("my_map", mymap{0: 0}); err != nil {
47 t.Fatal(err)
48 }
49 if want, have := "my_map=special_behavior", strings.TrimSpace(strings.Split(buf.String(), " ")[3]); want != have {
50 t.Errorf("want %#v, have %#v", want, have)
51 }
52 }
53
54 type mymap map[int]int
55
56 func (m mymap) String() string { return "special_behavior" }
57
58 func TestWithLevel(t *testing.T) {
59 tests := []struct {
60 name string
61 level logrus.Level
62 expectedLevel logrus.Level
63 }{
64 {
65 name: "Test Debug level",
66 level: logrus.DebugLevel,
67 expectedLevel: logrus.DebugLevel,
68 },
69 {
70 name: "Test Error level",
71 level: logrus.ErrorLevel,
72 expectedLevel: logrus.ErrorLevel,
73 },
74 {
75 name: "Test Warn level",
76 level: logrus.WarnLevel,
77 expectedLevel: logrus.WarnLevel,
78 },
79 {
80 name: "Test Info level",
81 level: logrus.InfoLevel,
82 expectedLevel: logrus.InfoLevel,
83 },
84 {
85 name: "Test Trace level",
86 level: logrus.TraceLevel,
87 expectedLevel: logrus.TraceLevel,
88 },
89 {
90 name: "Test not existing level",
91 level: 999,
92 expectedLevel: logrus.InfoLevel,
93 },
94 }
95 for _, tt := range tests {
96 buf := &bytes.Buffer{}
97 logrusLogger := logrus.New()
98 logrusLogger.Out = buf
99 logrusLogger.Level = tt.level
100 logrusLogger.Formatter = &logrus.JSONFormatter{}
101 logger := log.NewLogger(logrusLogger, log.WithLevel(tt.level))
102
103 t.Run(tt.name, func(t *testing.T) {
104 if err := logger.Log(); err != nil {
105 t.Fatal(err)
106 }
107
108 l := map[string]interface{}{}
109 if err := json.Unmarshal(buf.Bytes(), &l); err != nil {
110 t.Fatal(err)
111 }
112
113 if v, ok := l["level"].(string); !ok || v != tt.expectedLevel.String() {
114 t.Fatalf("Logging levels doesn't match. Expected: %s, got: %s", tt.level, v)
115 }
116
117 })
118 }
119 }
120
View as plain text