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),