Skip to content

Commit 8457e05

Browse files
committed
Skip func pointer type value in fields
Before there was introduced a fix for JSONFormatter when func type value passed as Field. This commit does the same but for pointer to func. Ref: sirupsen#642 sirupsen#832
1 parent 1beb3ed commit 8457e05

File tree

2 files changed

+27
-5
lines changed

2 files changed

+27
-5
lines changed

entry.go

+14-5
Original file line numberDiff line numberDiff line change
@@ -108,18 +108,27 @@ func (entry *Entry) WithFields(fields Fields) *Entry {
108108
for k, v := range entry.Data {
109109
data[k] = v
110110
}
111-
var field_err string
111+
var fieldErr string
112112
for k, v := range fields {
113-
if t := reflect.TypeOf(v); t != nil && t.Kind() == reflect.Func {
114-
field_err = fmt.Sprintf("can not add field %q", k)
113+
isErrField := false
114+
if t := reflect.TypeOf(v); t != nil {
115+
switch t.Kind() {
116+
case reflect.Func:
117+
isErrField = true
118+
case reflect.Ptr:
119+
isErrField = t.Elem().Kind() == reflect.Func
120+
}
121+
}
122+
if isErrField {
123+
fieldErr = fmt.Sprintf("can not add field %q", k)
115124
if entry.err != "" {
116-
field_err = entry.err + ", " + field_err
125+
fieldErr = entry.err + ", " + fieldErr
117126
}
118127
} else {
119128
data[k] = v
120129
}
121130
}
122-
return &Entry{Logger: entry.Logger, Data: data, Time: entry.Time, err: field_err}
131+
return &Entry{Logger: entry.Logger, Data: data, Time: entry.Time, err: fieldErr}
123132
}
124133

125134
// Overrides the time of the Entry.

entry_test.go

+13
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,16 @@ func TestEntryHooksPanic(t *testing.T) {
113113
entry := NewEntry(logger)
114114
entry.Info(badMessage)
115115
}
116+
117+
func TestEntryWithIncorrectField(t *testing.T) {
118+
assert := assert.New(t)
119+
120+
fn := func() {}
121+
122+
e := Entry{}
123+
eWithFunc := e.WithFields(Fields{"func": fn})
124+
eWithFuncPtr := e.WithFields(Fields{"funcPtr": &fn})
125+
126+
assert.Equal(eWithFunc.err, `can not add field "func"`)
127+
assert.Equal(eWithFuncPtr.err, `can not add field "funcPtr"`)
128+
}

0 commit comments

Comments
 (0)