From bc78a7bc36c01ac24335086696443b3c3d1401d0 Mon Sep 17 00:00:00 2001
From: Semyon Krestyaninov <ensiouel@gmail.com>
Date: Tue, 27 Feb 2024 16:16:01 +0300
Subject: [PATCH] refactor

---
 zap/filter_core.go | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/zap/filter_core.go b/zap/filter_core.go
index dee17ba5..c513bab5 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
 		}
 	}
-- 
GitLab