diff --git a/zap/channels.go b/zap/channels.go
index 33451c3afbd653815f55db84dcaea925cd1074e8..21467d40b16e43981e251f2b1d16cab2f68c5d1f 100644
--- a/zap/channels.go
+++ b/zap/channels.go
@@ -3,6 +3,7 @@ package zap
 import (
 	"strings"
 
+	"git.perx.ru/perxis/perxis-go/pkg/data"
 	"go.uber.org/zap/zapcore"
 )
 
@@ -10,13 +11,13 @@ const (
 	channelKey = "channel"
 )
 
-func HasChannel(channel string) FilterFunc {
+func ContainsChannels(channels ...string) FilterFunc {
 	return func(entry zapcore.Entry, fields []zapcore.Field) bool {
 		for _, f := range fields {
 			if f.Key == channelKey && f.Type == zapcore.StringType {
 				list := strings.Split(f.String, ",")
 				for _, v := range list {
-					if v == channel {
+					if data.Contains(v, channels) {
 						return true
 					}
 				}
@@ -26,22 +27,24 @@ func HasChannel(channel string) FilterFunc {
 	}
 }
 
-// NewDefaultChannelCore аналогичен NewChannelCore, но также устанавливает переданный канал в качестве канала по умолчанию.
-// Это означает, что если поле Channel в записи не указано, запись все равно будет передана в zapcore.Core.
-func NewDefaultChannelCore(core zapcore.Core, channel string) zapcore.Core {
-	return NewChannelCore(core, channel, true)
+// WithDefaultChannel аналогичен WithChannel, но также устанавливает переданный канал в качестве канала по умолчанию.
+// Это означает, что если поле Channels в записи не указано, запись все равно будет передана в zapcore.Core.
+func WithDefaultChannel(core zapcore.Core, channel string) zapcore.Core {
+	return WithChannel(core, channel, true)
 }
 
-// NewChannelCore добавляет к переданному Core фильтрацию записей по каналам.
-// Это означает, что если запись содержит поле Channel и значение соответствует
+// WithChannel добавляет к переданному Core фильтрацию записей по каналам.
+// Это означает, что если запись содержит поле Channels и значение соответствует
 // переданному каналу, то запись будет передана в zapcore.Core.
-func NewChannelCore(core zapcore.Core, channel string, isDefault ...bool) zapcore.Core {
-	filterFn := HasChannel(channel)
+func WithChannel(core zapcore.Core, channel string, isDefault ...bool) zapcore.Core {
+	filterFn := ContainsChannels(channel)
 	if len(isDefault) > 0 && isDefault[0] {
-		filterFn = Or(
-			HasChannel(channel),
-			Not(ContainsKey(channelKey)),
-		)
+		filterFn = Or(filterFn, Not(ContainsKey(channelKey)))
 	}
-	return RegisterFilters(core, filterFn)
+	return WithFilters(core, filterFn)
+}
+
+func WithChannels(core zapcore.Core, channels ...string) zapcore.Core {
+	filterFn := ContainsChannels(channels...)
+	return WithFilters(core, filterFn)
 }
diff --git a/zap/channels_test.go b/zap/channels_test.go
index 51fa290785a258dcb9c5faa372afa5ec1c228072..ba1a70eb188e4143346936f05fa94a1556966a38 100644
--- a/zap/channels_test.go
+++ b/zap/channels_test.go
@@ -10,12 +10,12 @@ import (
 
 func TestNewChannelCore_WriteSingleChannel(t *testing.T) {
 	core, logs := observer.New(zapcore.InfoLevel)
-	core = NewChannelCore(core, "test")
+	core = WithChannel(core, "test")
 
-	err := core.Write(zapcore.Entry{Message: "msg"}, []zapcore.Field{Channel("test")})
+	err := core.Write(zapcore.Entry{Message: "msg"}, []zapcore.Field{Channels("test")})
 	require.NoError(t, err)
 
-	err = core.Write(zapcore.Entry{Message: "msg"}, []zapcore.Field{Channel("empty")}) // запись не попадет в лог
+	err = core.Write(zapcore.Entry{Message: "msg"}, []zapcore.Field{Channels("empty")}) // запись не попадет в лог
 	require.NoError(t, err)
 
 	require.Equal(t, 1, logs.Len())
@@ -25,29 +25,25 @@ func TestNewChannelCore_WriteMultiplyChannels(t *testing.T) {
 	core, logs := observer.New(zapcore.InfoLevel)
 
 	core = zapcore.NewTee(
-		NewChannelCore(core, "test1"),
-		NewChannelCore(core, "test2"),
+		WithChannel(core, "test1"),
+		WithChannel(core, "test2"),
 	)
 
-	err := core.Write(zapcore.Entry{Message: "msg"}, []zapcore.Field{Channel("test1", "test2")}) // запись попадет сразу в 2 core
-	require.NoError(t, err)
-
+	require.NoError(t, core.Write(zapcore.Entry{Message: "msg"}, []zapcore.Field{Channels("test1", "test2")})) // запись попадет сразу в 2 core
 	require.Equal(t, 2, logs.Len())
 }
 
 func TestNewDefaultChannelCore(t *testing.T) {
 	core, logs := observer.New(zapcore.InfoLevel)
 
-	core = NewDefaultChannelCore(core, "test1")
-
-	err := core.Write(zapcore.Entry{Message: "msg"}, []zapcore.Field{Channel("test1")})
-	require.NoError(t, err)
-
-	err = core.Write(zapcore.Entry{Message: "msg"}, []zapcore.Field{Channel("test2")}) // эта запись не попадет в лог
-	require.NoError(t, err)
+	core = zapcore.NewTee(
+		WithChannel(core, "test1", true),
+		WithChannel(core, "test2"),
+	)
 
-	err = core.Write(zapcore.Entry{Message: "msg"}, []zapcore.Field{})
-	require.NoError(t, err)
+	require.NoError(t, core.Write(zapcore.Entry{Message: "msg"}, []zapcore.Field{Channels("test1")}))
+	require.NoError(t, core.Write(zapcore.Entry{Message: "msg"}, []zapcore.Field{Channels("test3")})) // эта запись не попадет в лог
+	require.NoError(t, core.Write(zapcore.Entry{Message: "msg"}, []zapcore.Field{}))
 
 	require.Equal(t, 2, logs.Len())
 }
diff --git a/zap/field.go b/zap/field.go
index 258753d60160ebb95ce745532431417d1003710a..a0c56f71083b6981f6c725f11466b4e0d82c789e 100644
--- a/zap/field.go
+++ b/zap/field.go
@@ -10,7 +10,7 @@ import (
 	"go.uber.org/zap"
 )
 
-func Channel(channels ...string) zap.Field {
+func Channels(channels ...string) zap.Field {
 	return zap.String(channelKey, strings.Join(channels, ","))
 }
 
diff --git a/zap/filter_core.go b/zap/filter_core.go
index 16888f583892b05bd379d5868ea5f58c6dbf4628..7e99d942e439afc8a05faaf55be29b8cb604b7fc 100644
--- a/zap/filter_core.go
+++ b/zap/filter_core.go
@@ -56,20 +56,20 @@ type filterCore struct {
 	fields []zap.Field
 }
 
-// RegisterFilters - добавить фильтры, которые будут применяться при записи лога (вызове `core.Write`)
+// WithFilters - добавить фильтры, которые будут применяться при записи лога (вызове `core.Write`)
 // Метод `core.Write` будет вызван только в случае, когда результат всех фильтров `true`
 //
 // Обратить внимание, фильтр не применяется к полям, которые были добавлены в `core` через вызов `core.With`
-// до вызова RegisterFilters. Пример:
+// до вызова WithFilters. Пример:
 //
 //	l, _ := zap.NewDevelopment()
 //	core := l.Core().With([]zapcore.Field{zap.Int("a", 5)})
-//	core = RegisterFilters(core, ContainsField(zap.Int("a", 5)))
+//	core = WithFilters(core, ContainsField(zap.Int("a", 5)))
 //
 //	logger := zap.New(core)
 //	logger.Info("Test log") // НЕ будет записан
 //	logger.Info("Test log", zap.Int("a", 5)) // будет записан
-func RegisterFilters(core zapcore.Core, filters ...FilterFunc) zapcore.Core {
+func WithFilters(core zapcore.Core, filters ...FilterFunc) zapcore.Core {
 	return &filterCore{
 		Core:    core,
 		filters: filters,
diff --git a/zap/filter_core_test.go b/zap/filter_core_test.go
index 6684be5fed08d382d41452a4a196a7fef9e45de1..21c906f24f5b7458c7628985871f1480564a3164 100644
--- a/zap/filter_core_test.go
+++ b/zap/filter_core_test.go
@@ -11,7 +11,7 @@ import (
 
 func TestFilterCore_Write(t *testing.T) {
 	core, logs := observer.New(zapcore.InfoLevel)
-	core = RegisterFilters(core, ContainsField(zap.Bool("check", true)))
+	core = WithFilters(core, ContainsField(zap.Bool("check", true)))
 
 	err := core.With([]zapcore.Field{zap.Bool("check", true)}).Write(zapcore.Entry{Message: "msg"}, nil)
 	require.NoError(t, err)
@@ -27,7 +27,7 @@ func TestFilterCore_Write(t *testing.T) {
 
 func TestNotContainsField(t *testing.T) {
 	core, logs := observer.New(zapcore.InfoLevel)
-	core = RegisterFilters(core, Not(ContainsField(zap.Int("b", 2))))
+	core = WithFilters(core, Not(ContainsField(zap.Int("b", 2))))
 
 	err := core.Write(zapcore.Entry{Message: "msg"}, []zapcore.Field{
 		zap.Int("a", 1),