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
 		}
 	}