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