diff --git a/entry.go b/entry.go index 4c00ba5c3..419e2d1e4 100644 --- a/entry.go +++ b/entry.go @@ -108,7 +108,7 @@ func (entry *Entry) WithFields(fields Fields) *Entry { for k, v := range entry.Data { data[k] = v } - var fieldErr string + fieldErr := entry.err for k, v := range fields { isErrField := false if t := reflect.TypeOf(v); t != nil { @@ -120,9 +120,11 @@ func (entry *Entry) WithFields(fields Fields) *Entry { } } if isErrField { - fieldErr = fmt.Sprintf("can not add field %q", k) - if entry.err != "" { - fieldErr = entry.err + ", " + fieldErr + tmp := fmt.Sprintf("can not add field %q", k) + if fieldErr != "" { + fieldErr = entry.err + ", " + tmp + } else { + fieldErr = tmp } } else { data[k] = v @@ -133,7 +135,7 @@ func (entry *Entry) WithFields(fields Fields) *Entry { // Overrides the time of the Entry. func (entry *Entry) WithTime(t time.Time) *Entry { - return &Entry{Logger: entry.Logger, Data: entry.Data, Time: t} + return &Entry{Logger: entry.Logger, Data: entry.Data, Time: t, err: entry.err} } // getPackageName reduces a fully qualified function name to the package name diff --git a/entry_test.go b/entry_test.go index 7afcc1159..5e6634112 100644 --- a/entry_test.go +++ b/entry_test.go @@ -4,6 +4,7 @@ import ( "bytes" "fmt" "testing" + "time" "github.com/stretchr/testify/assert" ) @@ -125,4 +126,16 @@ func TestEntryWithIncorrectField(t *testing.T) { assert.Equal(eWithFunc.err, `can not add field "func"`) assert.Equal(eWithFuncPtr.err, `can not add field "funcPtr"`) + + eWithFunc = eWithFunc.WithField("not_a_func", "it is a string") + eWithFuncPtr = eWithFuncPtr.WithField("not_a_func", "it is a string") + + assert.Equal(eWithFunc.err, `can not add field "func"`) + assert.Equal(eWithFuncPtr.err, `can not add field "funcPtr"`) + + eWithFunc = eWithFunc.WithTime(time.Now()) + eWithFuncPtr = eWithFuncPtr.WithTime(time.Now()) + + assert.Equal(eWithFunc.err, `can not add field "func"`) + assert.Equal(eWithFuncPtr.err, `can not add field "funcPtr"`) }