diff --git a/zap/channels.go b/zap/channels.go
index 3664f6ad8962e35a98b01acf6a5b54101b716194..92b3d823e3aef22c30736942c0aa8931c7e19b31 100644
--- a/zap/channels.go
+++ b/zap/channels.go
@@ -1,8 +1,6 @@
 package zap
 
 import (
-	"strings"
-
 	"git.perx.ru/perxis/perxis-go/pkg/data"
 	"go.uber.org/zap/zapcore"
 )
@@ -18,9 +16,8 @@ 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.StringType {
-				list := strings.Split(f.String, ",")
-				for _, v := range list {
+			if f.Key == channelKey && f.Type == zapcore.ArrayMarshalerType {
+				for _, v := range f.Interface.(stringArray) {
 					if data.Contains(v, channels) {
 						return true
 					}
diff --git a/zap/field.go b/zap/field.go
index a0c56f71083b6981f6c725f11466b4e0d82c789e..60a56235144b064b881d0705bdfe90b8c539719b 100644
--- a/zap/field.go
+++ b/zap/field.go
@@ -2,16 +2,25 @@ package zap
 
 import (
 	"context"
-	"strings"
 
 	"git.perx.ru/perxis/perxis-go/id"
 	_ "git.perx.ru/perxis/perxis-go/id/system" // регистрируем обработчики для системных объектов
 	"git.perx.ru/perxis/perxis-go/pkg/auth"
 	"go.uber.org/zap"
+	"go.uber.org/zap/zapcore"
 )
 
+type stringArray []string
+
+func (ss stringArray) MarshalLogArray(arr zapcore.ArrayEncoder) error {
+	for i := range ss {
+		arr.AppendString(ss[i])
+	}
+	return nil
+}
+
 func Channels(channels ...string) zap.Field {
-	return zap.String(channelKey, strings.Join(channels, ","))
+	return zap.Array(channelKey, stringArray(channels))
 }
 
 func Category(category string) zap.Field {