Skip to content

Commit d10c2f9

Browse files
committed
fix panic in text formatter
The panic was caused to a nil pointer access when report caller was activated with output coloring disabled Fixes #852
1 parent 566a5f6 commit d10c2f9

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

logrus_test.go

+12
Original file line numberDiff line numberDiff line change
@@ -702,3 +702,15 @@ func TestLogLevelEnabled(t *testing.T) {
702702
assert.Equal(t, true, log.IsLevelEnabled(DebugLevel))
703703
assert.Equal(t, true, log.IsLevelEnabled(TraceLevel))
704704
}
705+
706+
func TestReportCallerOnTextFormatter(t *testing.T) {
707+
l := New()
708+
709+
l.Formatter.(*TextFormatter).ForceColors = true
710+
l.Formatter.(*TextFormatter).DisableColors = false
711+
l.WithFields(Fields{"func": "func", "file": "file"}).Info("test")
712+
713+
l.Formatter.(*TextFormatter).ForceColors = false
714+
l.Formatter.(*TextFormatter).DisableColors = true
715+
l.WithFields(Fields{"func": "func", "file": "file"}).Info("test")
716+
}

text_formatter.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -164,18 +164,18 @@ func (f *TextFormatter) Format(entry *Entry) ([]byte, error) {
164164
} else {
165165
for _, key := range fixedKeys {
166166
var value interface{}
167-
switch key {
168-
case f.FieldMap.resolve(FieldKeyTime):
167+
switch {
168+
case key == f.FieldMap.resolve(FieldKeyTime):
169169
value = entry.Time.Format(timestampFormat)
170-
case f.FieldMap.resolve(FieldKeyLevel):
170+
case key == f.FieldMap.resolve(FieldKeyLevel):
171171
value = entry.Level.String()
172-
case f.FieldMap.resolve(FieldKeyMsg):
172+
case key == f.FieldMap.resolve(FieldKeyMsg):
173173
value = entry.Message
174-
case f.FieldMap.resolve(FieldKeyLogrusError):
174+
case key == f.FieldMap.resolve(FieldKeyLogrusError):
175175
value = entry.err
176-
case f.FieldMap.resolve(FieldKeyFunc):
176+
case key == f.FieldMap.resolve(FieldKeyFunc) && entry.HasCaller():
177177
value = entry.Caller.Function
178-
case f.FieldMap.resolve(FieldKeyFile):
178+
case key == f.FieldMap.resolve(FieldKeyFile) && entry.HasCaller():
179179
value = fmt.Sprintf("%s:%d", entry.Caller.File, entry.Caller.Line)
180180
default:
181181
value = entry.Data[key]

0 commit comments

Comments
 (0)