From 2fa915107faa8bd8bf0eade24a2a683ce6985461 Mon Sep 17 00:00:00 2001 From: Josh Kline Date: Sat, 15 May 2021 14:17:02 -0700 Subject: [PATCH] Add zaptest.observer.(*ObservedLogs).FilterLevel Method `observer.(*ObservedLogs).FilterLevel` allows consumers to select entries logged at a given level, for testing. --- zaptest/observer/observer.go | 7 +++++++ zaptest/observer/observer_test.go | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/zaptest/observer/observer.go b/zaptest/observer/observer.go index 2529b8bee..135d7afa2 100644 --- a/zaptest/observer/observer.go +++ b/zaptest/observer/observer.go @@ -78,6 +78,13 @@ func (o *ObservedLogs) AllUntimed() []LoggedEntry { return ret } +// FilterLevel filters entries to those logged at exactly the given level. +func (o *ObservedLogs) FilterLevel(level zapcore.Level) *ObservedLogs { + return o.Filter(func(e LoggedEntry) bool { + return e.Level == level + }) +} + // FilterMessage filters entries to those that have the specified message. func (o *ObservedLogs) FilterMessage(msg string) *ObservedLogs { return o.Filter(func(e LoggedEntry) bool { diff --git a/zaptest/observer/observer_test.go b/zaptest/observer/observer_test.go index 815e71d16..32bd342f9 100644 --- a/zaptest/observer/observer_test.go +++ b/zaptest/observer/observer_test.go @@ -157,6 +157,10 @@ func TestFilters(t *testing.T) { Entry: zapcore.Entry{Level: zap.InfoLevel, Message: "any slice"}, Context: []zapcore.Field{zap.Any("filterMe", []string{"b"})}, }, + { + Entry: zapcore.Entry{Level: zap.WarnLevel, Message: "danger will robinson"}, + Context: []zapcore.Field{zap.Int("b", 42)}, + }, } logger, sink := New(zap.InfoLevel) @@ -232,6 +236,11 @@ func TestFilters(t *testing.T) { return w }(), }, + { + msg: "filter level", + filtered: sink.FilterLevel(zap.WarnLevel), + want: logs[9:10], + }, } for _, tt := range tests {