From 9cbfa2e67b3849bc26d505f75387248f3d1770f7 Mon Sep 17 00:00:00 2001 From: "a.petraki" <a.petraki@perx.ru> Date: Mon, 19 Feb 2024 17:24:13 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zap/channels.go | 26 +++++++++++++++----------- zap/field.go | 3 --- zap/filter_core_test.go | 4 ++-- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/zap/channels.go b/zap/channels.go index c67d2755..33451c3a 100644 --- a/zap/channels.go +++ b/zap/channels.go @@ -6,7 +6,9 @@ import ( "go.uber.org/zap/zapcore" ) -const channelKey = "channel" +const ( + channelKey = "channel" +) func HasChannel(channel string) FilterFunc { return func(entry zapcore.Entry, fields []zapcore.Field) bool { @@ -27,17 +29,19 @@ func HasChannel(channel string) FilterFunc { // NewDefaultChannelCore аналогичен NewChannelCore, РЅРѕ также устанавливает переданный канал РІ качестве канала РїРѕ умолчанию. // Рто означает, что если поле Channel РІ записи РЅРµ указано, запись РІСЃРµ равно будет передана РІ zapcore.Core. func NewDefaultChannelCore(core zapcore.Core, channel string) zapcore.Core { - return RegisterFilters( - core, - Or( - HasChannel(channel), - Not(ContainsKey(channelKey)), - ), - ) + return NewChannelCore(core, channel, true) } // NewChannelCore добавляет Рє переданному Core фильтрацию записей РїРѕ каналам. -// Рто означает, что если запись содержит поле Channel Рё значение соответствует переданному каналу, то запись будет передана РІ zapcore.Core. -func NewChannelCore(core zapcore.Core, channel string) zapcore.Core { - return RegisterFilters(core, HasChannel(channel)) +// Рто означает, что если запись содержит поле Channel Рё значение соответствует +// переданному каналу, то запись будет передана РІ zapcore.Core. +func NewChannelCore(core zapcore.Core, channel string, isDefault ...bool) zapcore.Core { + filterFn := HasChannel(channel) + if len(isDefault) > 0 && isDefault[0] { + filterFn = Or( + HasChannel(channel), + Not(ContainsKey(channelKey)), + ) + } + return RegisterFilters(core, filterFn) } diff --git a/zap/field.go b/zap/field.go index b439f51b..09385b06 100644 --- a/zap/field.go +++ b/zap/field.go @@ -11,9 +11,6 @@ import ( ) func Channel(channels ...string) zap.Field { - if len(channels) == 0 { - return zap.Skip() - } return zap.String(channelKey, strings.Join(channels, ",")) } diff --git a/zap/filter_core_test.go b/zap/filter_core_test.go index cb38f41c..6684be5f 100644 --- a/zap/filter_core_test.go +++ b/zap/filter_core_test.go @@ -25,9 +25,9 @@ func TestFilterCore_Write(t *testing.T) { require.Equal(t, 2, logs.Len()) } -func TestNotHasField(t *testing.T) { +func TestNotContainsField(t *testing.T) { core, logs := observer.New(zapcore.InfoLevel) - core = RegisterFilters(core, NotHasField(zap.Int("b", 2))) + core = RegisterFilters(core, Not(ContainsField(zap.Int("b", 2)))) err := core.Write(zapcore.Entry{Message: "msg"}, []zapcore.Field{ zap.Int("a", 1), -- GitLab