Skip to content

Commit

Permalink
Merge pull request #870 from smacker/skip_func_pointer_type_value_in_…
Browse files Browse the repository at this point in the history
…fields

Skip func pointer type value in fields
  • Loading branch information
dgsb committed Dec 9, 2018
2 parents 3f19106 + 08e8d65 commit 93ebe33
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 5 deletions.
19 changes: 14 additions & 5 deletions entry.go
Expand Up @@ -108,18 +108,27 @@ func (entry *Entry) WithFields(fields Fields) *Entry {
for k, v := range entry.Data {
data[k] = v
}
var field_err string
var fieldErr string
for k, v := range fields {
if t := reflect.TypeOf(v); t != nil && t.Kind() == reflect.Func {
field_err = fmt.Sprintf("can not add field %q", k)
isErrField := false
if t := reflect.TypeOf(v); t != nil {
switch t.Kind() {
case reflect.Func:
isErrField = true
case reflect.Ptr:
isErrField = t.Elem().Kind() == reflect.Func
}
}
if isErrField {
fieldErr = fmt.Sprintf("can not add field %q", k)
if entry.err != "" {
field_err = entry.err + ", " + field_err
fieldErr = entry.err + ", " + fieldErr
}
} else {
data[k] = v
}
}
return &Entry{Logger: entry.Logger, Data: data, Time: entry.Time, err: field_err}
return &Entry{Logger: entry.Logger, Data: data, Time: entry.Time, err: fieldErr}
}

// Overrides the time of the Entry.
Expand Down
13 changes: 13 additions & 0 deletions entry_test.go
Expand Up @@ -113,3 +113,16 @@ func TestEntryHooksPanic(t *testing.T) {
entry := NewEntry(logger)
entry.Info(badMessage)
}

func TestEntryWithIncorrectField(t *testing.T) {
assert := assert.New(t)

fn := func() {}

e := Entry{}
eWithFunc := e.WithFields(Fields{"func": fn})
eWithFuncPtr := e.WithFields(Fields{"funcPtr": &fn})

assert.Equal(eWithFunc.err, `can not add field "func"`)
assert.Equal(eWithFuncPtr.err, `can not add field "funcPtr"`)
}

0 comments on commit 93ebe33

Please sign in to comment.