diff --git a/zap/channels.go b/zap/channels.go index c67d275541c28739dd45b04d8c643534e39dba16..33451c3afbd653815f55db84dcaea925cd1074e8 100644 --- a/zap/channels.go +++ b/zap/channels.go @@ -6,7 +6,9 @@ import ( "go.uber.org/zap/zapcore" ) -const channelKey = "channel" +const ( + channelKey = "channel" +) func HasChannel(channel string) FilterFunc { return func(entry zapcore.Entry, fields []zapcore.Field) bool { @@ -27,17 +29,19 @@ func HasChannel(channel string) FilterFunc { // NewDefaultChannelCore аналогичен NewChannelCore, РЅРѕ также устанавливает переданный канал РІ качестве канала РїРѕ умолчанию. // Рто означает, что если поле Channel РІ записи РЅРµ указано, запись РІСЃРµ равно будет передана РІ zapcore.Core. func NewDefaultChannelCore(core zapcore.Core, channel string) zapcore.Core { - return RegisterFilters( - core, - Or( - HasChannel(channel), - Not(ContainsKey(channelKey)), - ), - ) + return NewChannelCore(core, channel, true) } // NewChannelCore добавляет Рє переданному Core фильтрацию записей РїРѕ каналам. -// Рто означает, что если запись содержит поле Channel Рё значение соответствует переданному каналу, то запись будет передана РІ zapcore.Core. -func NewChannelCore(core zapcore.Core, channel string) zapcore.Core { - return RegisterFilters(core, HasChannel(channel)) +// Рто означает, что если запись содержит поле Channel Рё значение соответствует +// переданному каналу, то запись будет передана РІ zapcore.Core. +func NewChannelCore(core zapcore.Core, channel string, isDefault ...bool) zapcore.Core { + filterFn := HasChannel(channel) + if len(isDefault) > 0 && isDefault[0] { + filterFn = Or( + HasChannel(channel), + Not(ContainsKey(channelKey)), + ) + } + return RegisterFilters(core, filterFn) } diff --git a/zap/field.go b/zap/field.go index b439f51b05736b77ff0a991e9b828a2116cfa0e3..09385b06672a5381036a0cb182697b823b092478 100644 --- a/zap/field.go +++ b/zap/field.go @@ -11,9 +11,6 @@ import ( ) func Channel(channels ...string) zap.Field { - if len(channels) == 0 { - return zap.Skip() - } return zap.String(channelKey, strings.Join(channels, ",")) } diff --git a/zap/filter_core_test.go b/zap/filter_core_test.go index cb38f41cd2f0c5bab0aabea75112d9f1a57fd109..6684be5fed08d382d41452a4a196a7fef9e45de1 100644 --- a/zap/filter_core_test.go +++ b/zap/filter_core_test.go @@ -25,9 +25,9 @@ func TestFilterCore_Write(t *testing.T) { require.Equal(t, 2, logs.Len()) } -func TestNotHasField(t *testing.T) { +func TestNotContainsField(t *testing.T) { core, logs := observer.New(zapcore.InfoLevel) - core = RegisterFilters(core, NotHasField(zap.Int("b", 2))) + core = RegisterFilters(core, Not(ContainsField(zap.Int("b", 2)))) err := core.Write(zapcore.Entry{Message: "msg"}, []zapcore.Field{ zap.Int("a", 1),