Skip to content

Commit 977081d

Browse files
authored
Merge pull request #2074 from alexandear/refactor-pkg-logrusutil
pkg/logrusutil: Fix PropagateJSON to use logger; add tests
2 parents 439c8ba + 545b764 commit 977081d

File tree

2 files changed

+124
-1
lines changed

2 files changed

+124
-1
lines changed

pkg/logrusutil/logrusutil.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func PropagateJSON(logger *logrus.Logger, jsonLine []byte, header string, begin
5050
return
5151

5252
fallback:
53-
logrus.Info(header + string(jsonLine))
53+
logger.Info(header + string(jsonLine))
5454
}
5555

5656
// JSON is the type used in logrus.JSONFormatter

pkg/logrusutil/logrusutil_test.go

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
package logrusutil
2+
3+
import (
4+
"bytes"
5+
"testing"
6+
"time"
7+
8+
"github.com/sirupsen/logrus"
9+
"gotest.tools/v3/assert"
10+
)
11+
12+
func TestPropagateJSON(t *testing.T) {
13+
loggerWithoutTs := func(output *bytes.Buffer) *logrus.Logger {
14+
logger := logrus.New()
15+
logger.SetOutput(output)
16+
logger.SetLevel(logrus.TraceLevel)
17+
logger.SetFormatter(&logrus.TextFormatter{DisableTimestamp: true})
18+
return logger
19+
}
20+
21+
t.Run("trace level", func(t *testing.T) {
22+
actual := &bytes.Buffer{}
23+
logger := loggerWithoutTs(actual)
24+
jsonLine := []byte(`{"level": "trace"}`)
25+
26+
PropagateJSON(logger, jsonLine, "header", time.Time{})
27+
28+
assert.Equal(t, "level=trace msg=header\n", actual.String())
29+
})
30+
t.Run("debug level", func(t *testing.T) {
31+
actual := &bytes.Buffer{}
32+
logger := loggerWithoutTs(actual)
33+
jsonLine := []byte(`{"level": "debug"}`)
34+
35+
PropagateJSON(logger, jsonLine, "header", time.Time{})
36+
37+
assert.Equal(t, "level=debug msg=header\n", actual.String())
38+
})
39+
t.Run("info level", func(t *testing.T) {
40+
actual := &bytes.Buffer{}
41+
logger := loggerWithoutTs(actual)
42+
jsonLine := []byte(`{"level": "info"}`)
43+
44+
PropagateJSON(logger, jsonLine, "header", time.Time{})
45+
46+
assert.Equal(t, "level=info msg=header\n", actual.String())
47+
})
48+
t.Run("error level", func(t *testing.T) {
49+
actual := &bytes.Buffer{}
50+
logger := loggerWithoutTs(actual)
51+
jsonLine := []byte(`{"level": "error"}`)
52+
53+
PropagateJSON(logger, jsonLine, "header", time.Time{})
54+
55+
assert.Equal(t, "level=error msg=header\n", actual.String())
56+
})
57+
t.Run("warning level", func(t *testing.T) {
58+
actual := &bytes.Buffer{}
59+
logger := loggerWithoutTs(actual)
60+
jsonLine := []byte(`{"level": "warning"}`)
61+
62+
PropagateJSON(logger, jsonLine, "header", time.Time{})
63+
64+
assert.Equal(t, "level=warning msg=header\n", actual.String())
65+
})
66+
t.Run("panic level", func(t *testing.T) {
67+
actual := &bytes.Buffer{}
68+
logger := loggerWithoutTs(actual)
69+
jsonLine := []byte(`{"level": "panic"}`)
70+
71+
PropagateJSON(logger, jsonLine, "header", time.Time{})
72+
73+
assert.Equal(t, "level=error msg=header fields.level=panic\n", actual.String())
74+
})
75+
t.Run("fatal level", func(t *testing.T) {
76+
actual := &bytes.Buffer{}
77+
logger := loggerWithoutTs(actual)
78+
jsonLine := []byte(`{"level": "fatal"}`)
79+
80+
PropagateJSON(logger, jsonLine, "header", time.Time{})
81+
82+
assert.Equal(t, "level=error msg=header fields.level=fatal\n", actual.String())
83+
})
84+
t.Run("empty json line", func(t *testing.T) {
85+
actual := &bytes.Buffer{}
86+
logger := loggerWithoutTs(actual)
87+
jsonLine := []byte{}
88+
89+
PropagateJSON(logger, jsonLine, "header", time.Time{})
90+
91+
assert.Equal(t, "", actual.String())
92+
})
93+
t.Run("unmarshal failed", func(t *testing.T) {
94+
actual := &bytes.Buffer{}
95+
logger := loggerWithoutTs(actual)
96+
jsonLine := []byte(`"`)
97+
98+
PropagateJSON(logger, jsonLine, "header", time.Time{})
99+
100+
assert.Equal(t, `level=info msg="header\""
101+
`, actual.String())
102+
})
103+
t.Run("begin time after time in jsonLine", func(t *testing.T) {
104+
actual := &bytes.Buffer{}
105+
logger := loggerWithoutTs(actual)
106+
jsonLine := []byte(`{"level": "info", "time": "2023-12-01T00:00:00.0000+00:00"}`)
107+
begin := time.Date(2023, time.December, 15, 0, 0, 0, 0, time.UTC)
108+
109+
PropagateJSON(logger, jsonLine, "header", begin)
110+
111+
assert.Equal(t, "", actual.String())
112+
})
113+
t.Run("parse level failed", func(t *testing.T) {
114+
actual := &bytes.Buffer{}
115+
logger := loggerWithoutTs(actual)
116+
jsonLine := []byte(`{"level": "info", "level": "unknown level"}`)
117+
118+
PropagateJSON(logger, jsonLine, "header", time.Time{})
119+
120+
assert.Equal(t, `level=info msg="header{\"level\": \"info\", \"level\": \"unknown level\"}"
121+
`, actual.String())
122+
})
123+
}

0 commit comments

Comments
 (0)