From d0ca9bbceba337238110f05f26093f5750c0cbe3 Mon Sep 17 00:00:00 2001 From: Olivier Poitrey Date: Sun, 25 Mar 2018 20:18:47 -0700 Subject: [PATCH] Add support for pointer values in Fields Fixes #46 --- fields.go | 32 ++++++++++++++++++++++++++++++++ log_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/fields.go b/fields.go index 6a19392..be03edf 100644 --- a/fields.go +++ b/fields.go @@ -54,6 +54,38 @@ func appendFields(dst []byte, fields map[string]interface{}) []byte { dst = json.AppendTime(dst, val, TimeFieldFormat) case time.Duration: dst = json.AppendDuration(dst, val, DurationFieldUnit, DurationFieldInteger) + case *string: + dst = json.AppendString(dst, *val) + case *bool: + dst = json.AppendBool(dst, *val) + case *int: + dst = json.AppendInt(dst, *val) + case *int8: + dst = json.AppendInt8(dst, *val) + case *int16: + dst = json.AppendInt16(dst, *val) + case *int32: + dst = json.AppendInt32(dst, *val) + case *int64: + dst = json.AppendInt64(dst, *val) + case *uint: + dst = json.AppendUint(dst, *val) + case *uint8: + dst = json.AppendUint8(dst, *val) + case *uint16: + dst = json.AppendUint16(dst, *val) + case *uint32: + dst = json.AppendUint32(dst, *val) + case *uint64: + dst = json.AppendUint64(dst, *val) + case *float32: + dst = json.AppendFloat32(dst, *val) + case *float64: + dst = json.AppendFloat64(dst, *val) + case *time.Time: + dst = json.AppendTime(dst, *val, TimeFieldFormat) + case *time.Duration: + dst = json.AppendDuration(dst, *val, DurationFieldUnit, DurationFieldInteger) case []string: dst = json.AppendStrings(dst, val) case []bool: diff --git a/log_test.go b/log_test.go index 0f5e4cc..4c3bea6 100644 --- a/log_test.go +++ b/log_test.go @@ -135,6 +135,32 @@ func TestFieldsMap(t *testing.T) { } } +func TestFieldsMapPnt(t *testing.T) { + out := &bytes.Buffer{} + log := New(out) + log.Log().Fields(map[string]interface{}{ + "string": new(string), + "bool": new(bool), + "int": new(int), + "int8": new(int8), + "int16": new(int16), + "int32": new(int32), + "int64": new(int64), + "uint": new(uint), + "uint8": new(uint8), + "uint16": new(uint16), + "uint32": new(uint32), + "uint64": new(uint64), + "float32": new(float32), + "float64": new(float64), + "dur": new(time.Duration), + "time": new(time.Time), + }).Msg("") + if got, want := out.String(), `{"bool":false,"dur":0,"float32":0,"float64":0,"int":0,"int16":0,"int32":0,"int64":0,"int8":0,"string":"","time":"0001-01-01T00:00:00Z","uint":0,"uint16":0,"uint32":0,"uint64":0,"uint8":0}`+"\n"; got != want { + t.Errorf("invalid log output:\ngot: %v\nwant: %v", got, want) + } +} + func TestFields(t *testing.T) { out := &bytes.Buffer{} log := New(out)