diff --git a/zap/filter_core.go b/zap/filter_core.go index dee17ba5daf2aaf265207b516028520f08d6ced6..c513bab5dc8039703aa8a41fa02675e690dd8268 100644 --- a/zap/filter_core.go +++ b/zap/filter_core.go @@ -1,6 +1,8 @@ package zap import ( + "slices" + "go.uber.org/zap" "go.uber.org/zap/zapcore" ) @@ -51,9 +53,9 @@ type filterCore struct { filters []FilterFunc - // fields хранит контекст записей ядра, передаваемых при вызове With. + // context хранит контекст записей ядра, передаваемых при вызове With. // В методе Write передаются только поля конкретной записи, но мы также хотим учитывать поля контекста ядра. - fields []zap.Field + context []zap.Field } // WithFilters - добавить фильтры, которые будут применяться при записи лога (вызове `core.Write`) @@ -78,9 +80,9 @@ func WithFilters(core zapcore.Core, filters ...FilterFunc) zapcore.Core { func (core *filterCore) With(fields []zapcore.Field) zapcore.Core { return &filterCore{ - Core: core.Core, + Core: core.Core.With(fields), filters: core.filters, - fields: append(core.fields, fields...), + context: slices.Concat(core.context, fields), } } @@ -92,12 +94,8 @@ func (core *filterCore) Check(entry zapcore.Entry, checkedEntry *zapcore.Checked } func (core *filterCore) Write(entry zapcore.Entry, fields []zapcore.Field) error { - if len(core.fields) > 0 { - fields = append(core.fields, fields...) - } - for _, filter := range core.filters { - if !filter(entry, fields) { + if !filter(entry, slices.Concat(core.context, fields)) { return nil } }