diff --git a/zap/channels.go b/zap/channels.go
index 92b3d823e3aef22c30736942c0aa8931c7e19b31..5753163514b1a91605e54e41adfdac711a2518b4 100644
--- a/zap/channels.go
+++ b/zap/channels.go
@@ -16,7 +16,7 @@ const (
 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.ArrayMarshalerType {
+			if f.Key == channelKey && f.Type == zapcore.SkipType {
 				for _, v := range f.Interface.(stringArray) {
 					if data.Contains(v, channels) {
 						return true
@@ -34,7 +34,7 @@ func WithDefaultChannel(core zapcore.Core, channel string) zapcore.Core {
 	return WithChannel(core, channel, true)
 }
 
-// WithChannel добавляет к переданному Core фильтрацию записей по каналам.
+// WithChannel добавляет к переданному zapcore.Core фильтрацию записей по каналам.
 // Это означает, что если запись содержит поле Channels и значение соответствует
 // переданному каналу, то запись будет передана в zapcore.Core.
 func WithChannel(core zapcore.Core, channel string, isDefault ...bool) zapcore.Core {
diff --git a/zap/field.go b/zap/field.go
index 60a56235144b064b881d0705bdfe90b8c539719b..308c21d6e83a4a80c35ab9866cb757e65c4b7a24 100644
--- a/zap/field.go
+++ b/zap/field.go
@@ -19,8 +19,13 @@ func (ss stringArray) MarshalLogArray(arr zapcore.ArrayEncoder) error {
 	return nil
 }
 
+// Channels возвращает поле, содержащее список каналов, в которые должна быть передана запись.
 func Channels(channels ...string) zap.Field {
-	return zap.Array(channelKey, stringArray(channels))
+	return zap.Field{
+		Key:       channelKey,
+		Type:      zapcore.SkipType, // используем тип zapcore.SkipType, чтобы при кодировании поле игнорировалось
+		Interface: stringArray(channels),
+	}
 }
 
 func Category(category string) zap.Field {
diff --git a/zap/field_test.go b/zap/field_test.go
index 5c107d7bc769c04a066b636e0f7a79ca892420f8..84efa584f85a66468e160334510e39ddee0246b0 100644
--- a/zap/field_test.go
+++ b/zap/field_test.go
@@ -10,8 +10,34 @@ import (
 	"git.perx.ru/perxis/perxis-go/pkg/users"
 	"github.com/stretchr/testify/assert"
 	"go.uber.org/zap"
+	"go.uber.org/zap/zapcore"
 )
 
+func TestChannels(t *testing.T) {
+	tests := []struct {
+		name  string
+		field zap.Field
+		want  zap.Field
+	}{
+		{name: "ok", field: Channels("master"), want: zap.Field{Key: channelKey, Type: zapcore.SkipType, Interface: stringArray{"master"}}},
+		{name: "invalid", field: Channels(), want: zap.Field{Key: channelKey, Type: zapcore.SkipType, Interface: stringArray(nil)}},
+	}
+
+	for _, tc := range tests {
+		t.Run(tc.name, func(t *testing.T) {
+			assert.Equal(t, tc.want, tc.field)
+		})
+	}
+}
+
+func TestChannelsEncode(t *testing.T) {
+	enc := zapcore.NewMapObjectEncoder()
+	field := Channels("master")
+	field.AddTo(enc)
+
+	assert.Empty(t, enc.Fields)
+}
+
 func TestCategory(t *testing.T) {
 	tests := []struct {
 		name  string