Test that level values are correctly formatted in Logfmt and JSON.
Chris Hines
7 years ago
2 | 2 | import ( |
3 | 3 | "bytes" |
4 | 4 | "errors" |
5 | "io" | |
5 | 6 | "strings" |
6 | 7 | "testing" |
7 | 8 | |
103 | 104 | t.Errorf("want %v, have %v", want, have) |
104 | 105 | } |
105 | 106 | if want, have := ``, strings.TrimSpace(buf.String()); want != have { |
106 | t.Errorf("want %q, have %q", want, have) | |
107 | t.Errorf("\nwant '%s'\nhave '%s'", want, have) | |
107 | 108 | } |
108 | 109 | } |
109 | 110 | |
119 | 120 | t.Errorf("want %v, have %v", want, have) |
120 | 121 | } |
121 | 122 | if want, have := `{"foo":"bar"}`, strings.TrimSpace(buf.String()); want != have { |
122 | t.Errorf("want %q, have %q", want, have) | |
123 | t.Errorf("\nwant '%s'\nhave '%s'", want, have) | |
123 | 124 | } |
124 | 125 | } |
125 | 126 | |
134 | 135 | logger = log.NewContext(logger).With("caller", log.DefaultCaller) |
135 | 136 | |
136 | 137 | level.Info(logger).Log("foo", "bar") |
137 | if want, have := `level=info caller=level_test.go:137 foo=bar`, strings.TrimSpace(buf.String()); want != have { | |
138 | t.Errorf("want %q, have %q", want, have) | |
138 | if want, have := `level=info caller=level_test.go:138 foo=bar`, strings.TrimSpace(buf.String()); want != have { | |
139 | t.Errorf("\nwant '%s'\nhave '%s'", want, have) | |
139 | 140 | } |
140 | 141 | } |
141 | 142 | |
150 | 151 | logger = level.NewFilter(logger, level.AllowAll()) |
151 | 152 | |
152 | 153 | level.Info(logger).Log("foo", "bar") |
153 | if want, have := `caller=level_test.go:153 level=info foo=bar`, strings.TrimSpace(buf.String()); want != have { | |
154 | t.Errorf("want %q, have %q", want, have) | |
154 | if want, have := `caller=level_test.go:154 level=info foo=bar`, strings.TrimSpace(buf.String()); want != have { | |
155 | t.Errorf("\nwant '%s'\nhave '%s'", want, have) | |
155 | 156 | } |
156 | 157 | } |
158 | ||
159 | func TestLevelFormatting(t *testing.T) { | |
160 | testCases := []struct { | |
161 | name string | |
162 | format func(io.Writer) log.Logger | |
163 | output string | |
164 | }{ | |
165 | { | |
166 | name: "logfmt", | |
167 | format: log.NewLogfmtLogger, | |
168 | output: `level=info foo=bar`, | |
169 | }, | |
170 | { | |
171 | name: "JSON", | |
172 | format: log.NewJSONLogger, | |
173 | output: `{"foo":"bar","level":"info"}`, | |
174 | }, | |
175 | } | |
176 | ||
177 | for _, tc := range testCases { | |
178 | t.Run(tc.name, func(t *testing.T) { | |
179 | var buf bytes.Buffer | |
180 | ||
181 | logger := tc.format(&buf) | |
182 | level.Info(logger).Log("foo", "bar") | |
183 | if want, have := tc.output, strings.TrimSpace(buf.String()); want != have { | |
184 | t.Errorf("\nwant: '%s'\nhave '%s'", want, have) | |
185 | } | |
186 | }) | |
187 | } | |
188 | } |