Skip to content

Commit 0d79ead

Browse files
authored
feat: split formatter start and end markers (#99)
1 parent a2c16af commit 0d79ead

File tree

3 files changed

+30
-4
lines changed

3 files changed

+30
-4
lines changed

format.go

+22-4
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ const (
2121
// Formatter represents a log message formatter.
2222
type Formatter interface {
2323
WriteMessage(buf *bytes.Buffer, ts time.Time, lvl Level, msg string)
24+
AppendBeginMarker(buf *bytes.Buffer)
2425
AppendEndMarker(buf *bytes.Buffer)
26+
AppendLineBreak(buf *bytes.Buffer)
2527
AppendArrayStart(buf *bytes.Buffer)
2628
AppendArraySep(buf *bytes.Buffer)
2729
AppendArrayEnd(buf *bytes.Buffer)
@@ -44,7 +46,7 @@ func JSONFormat() Formatter {
4446
}
4547

4648
func (j *json) WriteMessage(buf *bytes.Buffer, ts time.Time, lvl Level, msg string) {
47-
buf.WriteString(`{"`)
49+
buf.WriteString(`"`)
4850
if !ts.IsZero() {
4951
buf.WriteString(TimestampKey)
5052
buf.WriteString(`":`)
@@ -60,8 +62,16 @@ func (j *json) WriteMessage(buf *bytes.Buffer, ts time.Time, lvl Level, msg stri
6062
appendString(buf, msg, true)
6163
}
6264

65+
func (j *json) AppendBeginMarker(buf *bytes.Buffer) {
66+
buf.WriteString("{")
67+
}
68+
6369
func (j *json) AppendEndMarker(buf *bytes.Buffer) {
64-
buf.WriteString("}\n")
70+
buf.WriteString("}")
71+
}
72+
73+
func (j *json) AppendLineBreak(buf *bytes.Buffer) {
74+
buf.WriteString("\n")
6575
}
6676

6777
func (j *json) AppendArrayStart(buf *bytes.Buffer) {
@@ -158,7 +168,11 @@ func (l *logfmt) WriteMessage(buf *bytes.Buffer, ts time.Time, lvl Level, msg st
158168
appendString(buf, msg, l.needsQuote(msg))
159169
}
160170

161-
func (l *logfmt) AppendEndMarker(buf *bytes.Buffer) {
171+
func (l *logfmt) AppendBeginMarker(*bytes.Buffer) {}
172+
173+
func (l *logfmt) AppendEndMarker(*bytes.Buffer) {}
174+
175+
func (l *logfmt) AppendLineBreak(buf *bytes.Buffer) {
162176
buf.WriteByte('\n')
163177
}
164178

@@ -297,7 +311,11 @@ func (c *console) WriteMessage(buf *bytes.Buffer, ts time.Time, lvl Level, msg s
297311
appendString(buf, msg, false)
298312
}
299313

300-
func (c *console) AppendEndMarker(buf *bytes.Buffer) {
314+
func (c *console) AppendBeginMarker(*bytes.Buffer) {}
315+
316+
func (c *console) AppendEndMarker(*bytes.Buffer) {}
317+
318+
func (c *console) AppendLineBreak(buf *bytes.Buffer) {
301319
buf.WriteByte('\n')
302320
}
303321

format_test.go

+6
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ func TestJsonFormat(t *testing.T) {
1313
fmtr := logger.JSONFormat()
1414

1515
buf := bytes.NewBuffer(512)
16+
fmtr.AppendBeginMarker(buf)
1617
fmtr.WriteMessage(buf, time.Unix(123, 0).UTC(), logger.Error, "some message")
1718
fmtr.AppendKey(buf, "error")
1819
fmtr.AppendString(buf, "some error")
1920
fmtr.AppendEndMarker(buf)
21+
fmtr.AppendLineBreak(buf)
2022

2123
want := `{"ts":123,"lvl":"eror","msg":"some message","error":"some error"}` + "\n"
2224
assert.Equal(t, want, string(buf.Bytes()))
@@ -174,10 +176,12 @@ func TestLogfmtFormat(t *testing.T) {
174176
fmtr := logger.LogfmtFormat()
175177

176178
buf := bytes.NewBuffer(512)
179+
fmtr.AppendBeginMarker(buf)
177180
fmtr.WriteMessage(buf, time.Unix(123, 0).UTC(), logger.Error, "some message")
178181
fmtr.AppendKey(buf, "error")
179182
fmtr.AppendString(buf, "some error")
180183
fmtr.AppendEndMarker(buf)
184+
fmtr.AppendLineBreak(buf)
181185

182186
want := `ts=123 lvl=eror msg="some message" error="some error"` + "\n"
183187
assert.Equal(t, want, string(buf.Bytes()))
@@ -335,10 +339,12 @@ func TestConsoleFormat(t *testing.T) {
335339
fmtr := logger.ConsoleFormat()
336340

337341
buf := bytes.NewBuffer(512)
342+
fmtr.AppendBeginMarker(buf)
338343
fmtr.WriteMessage(buf, time.Unix(123, 0).UTC(), logger.Error, "some message")
339344
fmtr.AppendKey(buf, "error")
340345
fmtr.AppendString(buf, "some error")
341346
fmtr.AppendEndMarker(buf)
347+
fmtr.AppendLineBreak(buf)
342348

343349
want := "\x1b[34m12:02AM\x1b[0m \x1b[31mEROR\x1b[0m some message \x1b[31merror=\x1b[0msome error\n"
344350
assert.Equal(t, want, string(buf.Bytes()))

logger.go

+2
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ func (l *Logger) write(msg string, lvl Level, ctx []Field) {
224224
ts = l.timeFn()
225225
}
226226

227+
e.fmtr.AppendBeginMarker(e.buf)
227228
e.fmtr.WriteMessage(e.buf, ts, lvl, msg)
228229
e.buf.Write(l.ctx)
229230

@@ -232,6 +233,7 @@ func (l *Logger) write(msg string, lvl Level, ctx []Field) {
232233
}
233234

234235
e.fmtr.AppendEndMarker(e.buf)
236+
e.fmtr.AppendLineBreak(e.buf)
235237

236238
_, _ = l.w.Write(e.buf.Bytes())
237239

0 commit comments

Comments
 (0)