From e5cf350d0d6dce55903ad11a39a2083cb77f5855 Mon Sep 17 00:00:00 2001 From: NoahLan <6995syu@163.com> Date: Thu, 20 Jul 2023 17:32:08 +0800 Subject: [PATCH] fix: Errorv should generate JSON Object for content field in log --- nlog/richlogger.go | 12 +++++------ nlog/richlogger_test.go | 45 ++++++++++++++++++++++++++++++++++++++--- nlog/syslog_test.go | 2 ++ 3 files changed, 50 insertions(+), 9 deletions(-) diff --git a/nlog/richlogger.go b/nlog/richlogger.go index 021892a..d2205db 100644 --- a/nlog/richlogger.go +++ b/nlog/richlogger.go @@ -63,7 +63,7 @@ func (l *richLogger) Errorf(format string, v ...any) { } func (l *richLogger) Errorv(v any) { - l.err(fmt.Sprint(v)) + l.err(v) } func (l *richLogger) Errorw(msg string, fields ...LogField) { @@ -128,7 +128,7 @@ func (l *richLogger) WithFields(fields ...LogField) Logger { func (l *richLogger) buildFields(fields ...LogField) []LogField { fields = append(l.fields, fields...) - fields = append(fields, Field(callerKey, getCaller(CallerDepth+l.callerSkip))) + fields = append(fields, Field(callerKey, getCaller(callerDepth+l.callerSkip))) if l.ctx == nil { return fields @@ -156,24 +156,24 @@ func (l *richLogger) buildFields(fields ...LogField) []LogField { func (l *richLogger) debug(v any, fields ...LogField) { if shallLog(DebugLevel) { - GetWriter().Debug(v, l.buildFields(fields...)...) + getWriter().Debug(v, l.buildFields(fields...)...) } } func (l *richLogger) err(v any, fields ...LogField) { if shallLog(ErrorLevel) { - GetWriter().Error(v, l.buildFields(fields...)...) + getWriter().Error(v, l.buildFields(fields...)...) } } func (l *richLogger) info(v any, fields ...LogField) { if shallLog(InfoLevel) { - GetWriter().Info(v, l.buildFields(fields...)...) + getWriter().Info(v, l.buildFields(fields...)...) } } func (l *richLogger) slow(v any, fields ...LogField) { if shallLog(ErrorLevel) { - GetWriter().Slow(v, l.buildFields(fields...)...) + getWriter().Slow(v, l.buildFields(fields...)...) } } diff --git a/nlog/richlogger_test.go b/nlog/richlogger_test.go index 87ac2ea..edf5663 100644 --- a/nlog/richlogger_test.go +++ b/nlog/richlogger_test.go @@ -66,6 +66,9 @@ func TestTraceDebug(t *testing.T) { l.WithDuration(time.Second).Debugv(testlog) validate(t, w.String(), true, true) w.Reset() + l.WithDuration(time.Second).Debugv(testobj) + validateContentType(t, w.String(), map[string]any{}, true, true) + w.Reset() l.WithDuration(time.Second).Debugw(testlog, Field("foo", "bar")) validate(t, w.String(), true, true) assert.True(t, strings.Contains(w.String(), "foo"), w.String()) @@ -103,6 +106,9 @@ func TestTraceError(t *testing.T) { l.WithDuration(time.Second).Errorv(testlog) validate(t, w.String(), true, true) w.Reset() + l.WithDuration(time.Second).Errorv(testobj) + validateContentType(t, w.String(), map[string]any{}, true, true) + w.Reset() l.WithDuration(time.Second).Errorw(testlog, Field("basket", "ball")) validate(t, w.String(), true, true) assert.True(t, strings.Contains(w.String(), "basket"), w.String()) @@ -137,6 +143,9 @@ func TestTraceInfo(t *testing.T) { l.WithDuration(time.Second).Infov(testlog) validate(t, w.String(), true, true) w.Reset() + l.WithDuration(time.Second).Infov(testobj) + validateContentType(t, w.String(), map[string]any{}, true, true) + w.Reset() l.WithDuration(time.Second).Infow(testlog, Field("basket", "ball")) validate(t, w.String(), true, true) assert.True(t, strings.Contains(w.String(), "basket"), w.String()) @@ -173,6 +182,9 @@ func TestTraceInfoConsole(t *testing.T) { w.Reset() l.WithDuration(time.Second).Infov(testlog) validate(t, w.String(), true, true) + w.Reset() + l.WithDuration(time.Second).Infov(testobj) + validateContentType(t, w.String(), map[string]any{}, true, true) } func TestTraceSlow(t *testing.T) { @@ -204,6 +216,9 @@ func TestTraceSlow(t *testing.T) { l.WithDuration(time.Second).Slowv(testlog) validate(t, w.String(), true, true) w.Reset() + l.WithDuration(time.Second).Slowv(testobj) + validateContentType(t, w.String(), map[string]any{}, true, true) + w.Reset() l.WithDuration(time.Second).Sloww(testlog, Field("basket", "ball")) validate(t, w.String(), true, true) assert.True(t, strings.Contains(w.String(), "basket"), w.String()) @@ -311,8 +326,32 @@ func validate(t *testing.T, body string, expectedTrace, expectedSpan bool) { assert.Equal(t, expectedSpan, len(val.Span) > 0, body) } +func validateContentType(t *testing.T, body string, expectedType any, expectedTrace, expectedSpan bool) { + var val mockValue + dec := json.NewDecoder(strings.NewReader(body)) + + for { + var doc mockValue + err := dec.Decode(&doc) + if err == io.EOF { + // all done + break + } + if err != nil { + continue + } + + val = doc + } + + assert.IsType(t, expectedType, val.Content, body) + assert.Equal(t, expectedTrace, len(val.Trace) > 0, body) + assert.Equal(t, expectedSpan, len(val.Span) > 0, body) +} + type mockValue struct { - Trace string `json:"trace"` - Span string `json:"span"` - Foo string `json:"foo"` + Trace string `json:"trace"` + Span string `json:"span"` + Foo string `json:"foo"` + Content any `json:"content"` } diff --git a/nlog/syslog_test.go b/nlog/syslog_test.go index 7bed8f4..7b901ac 100644 --- a/nlog/syslog_test.go +++ b/nlog/syslog_test.go @@ -12,6 +12,8 @@ import ( const testlog = "Stay hungry, stay foolish." +var testobj = map[string]any{"foo": "bar"} + func TestCollectSysLog(t *testing.T) { CollectSysLog() content := getContent(captureOutput(func() {