diff --git a/zapcore/level.go b/zapcore/level.go index e01a24131..751cf0b98 100644 --- a/zapcore/level.go +++ b/zapcore/level.go @@ -183,7 +183,7 @@ func (l *Level) unmarshalText(text []byte) bool { *l = DebugLevel case "info", "INFO", "": // make the zero value useful *l = InfoLevel - case "warn", "WARN": + case "warn", "warning", "WARN": *l = WarnLevel case "error", "ERROR": *l = ErrorLevel diff --git a/zapcore/level_test.go b/zapcore/level_test.go index d8eb96292..eaa8e0803 100644 --- a/zapcore/level_test.go +++ b/zapcore/level_test.go @@ -75,6 +75,16 @@ func TestLevelText(t *testing.T) { assert.NoError(t, err, `Unexpected error unmarshaling text %q to level.`, tt.text) assert.Equal(t, tt.level, unmarshaled, `Text %q unmarshaled to an unexpected level.`, tt.text) } + + // Some logging libraries are using "warning" instead of "warn" as level indicator. Handle this case + // for cross compatability. + t.Run("unmarshal warning compatability", func(t *testing.T) { + var unmarshaled Level + input := []byte("warning") + err := unmarshaled.UnmarshalText(input) + assert.NoError(t, err, `Unexpected error unmarshaling text %q to level.`, string(input)) + assert.Equal(t, WarnLevel, unmarshaled, `Text %q unmarshaled to an unexpected level.`, string(input)) + }) } func TestParseLevel(t *testing.T) {