From 130ef27d8fe50714d8671e172988c09a87b41e7d 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).FilterLevelExact Method `observer.(*ObservedLogs).FilterLevelExact` allows consumers to select entries logged at a given level, for testing. --- zaptest/observer/observer.go | 7 +++++++ zaptest/observer/observer_test.go | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/zaptest/observer/observer.go b/zaptest/observer/observer.go index cdd7f5f21..f3f6116b6 100644 --- a/zaptest/observer/observer.go +++ b/zaptest/observer/observer.go @@ -78,6 +78,13 @@ func (o *ObservedLogs) AllUntimed() []LoggedEntry { return ret } +// FilterLevelExact filters entries to those logged at exactly the given level. +func (o *ObservedLogs) FilterLevelExact(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..615948812 100644 --- a/zaptest/observer/observer_test.go +++ b/zaptest/observer/observer_test.go @@ -157,6 +157,14 @@ 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)}, + }, + { + Entry: zapcore.Entry{Level: zap.ErrorLevel, Message: "warp core breach"}, + Context: []zapcore.Field{zap.Int("b", 42)}, + }, } logger, sink := New(zap.InfoLevel) @@ -232,6 +240,11 @@ func TestFilters(t *testing.T) { return w }(), }, + { + msg: "filter level", + filtered: sink.FilterLevelExact(zap.WarnLevel), + want: logs[9:10], + }, } for _, tt := range tests {