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