From 63f97b51f7f70c454a74f1ec42d835f67b5e4325 Mon Sep 17 00:00:00 2001
From: Semyon Krestyaninov <ensiouel@gmail.com>
Date: Wed, 28 Feb 2024 14:54:11 +0300
Subject: [PATCH] fix tests

---
 logs/zap/core.go          |  4 +++-
 logs/zap/entry_encoder.go | 18 ++++++++++++------
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/logs/zap/core.go b/logs/zap/core.go
index a6c1c2ec..aee31e41 100644
--- a/logs/zap/core.go
+++ b/logs/zap/core.go
@@ -28,10 +28,12 @@ func NewCore(writeSyncer WriteSyncer) *Core {
 }
 
 func (core *Core) With(fields []zapcore.Field) zapcore.Core {
+	enc := core.enc.Clone()
+	enc.AddFields(fields)
 	return &Core{
 		LevelEnabler: core.LevelEnabler,
 		ws:           core.ws,
-		enc:          core.enc.With(fields),
+		enc:          enc,
 	}
 }
 
diff --git a/logs/zap/entry_encoder.go b/logs/zap/entry_encoder.go
index 62ca529d..d7db9b30 100644
--- a/logs/zap/entry_encoder.go
+++ b/logs/zap/entry_encoder.go
@@ -12,7 +12,8 @@ import (
 )
 
 type Encoder interface {
-	With([]zapcore.Field) Encoder
+	Clone() Encoder
+	AddFields([]zapcore.Field)
 	EncodeEntry(zapcore.Entry, []zapcore.Field) (*logs.Entry, error)
 }
 
@@ -24,12 +25,16 @@ func NewEntryEncoder() Encoder {
 	return &entryEncoder{}
 }
 
-func (enc *entryEncoder) With(fields []zapcore.Field) Encoder {
-	return enc.with(fields)
+func (enc *entryEncoder) AddFields(fields []zapcore.Field) {
+	enc.fields = slices.Concat(enc.fields, fields)
 }
 
-func (enc *entryEncoder) with(fields []zapcore.Field) *entryEncoder {
-	return &entryEncoder{fields: slices.Concat(enc.fields, fields)}
+func (enc *entryEncoder) Clone() Encoder {
+	return enc.clone()
+}
+
+func (enc *entryEncoder) clone() *entryEncoder {
+	return &entryEncoder{fields: slices.Clone(enc.fields)}
 }
 
 func (enc *entryEncoder) EncodeEntry(entry zapcore.Entry, fields []zapcore.Field) (*logs.Entry, error) {
@@ -40,7 +45,8 @@ func (enc *entryEncoder) EncodeEntry(entry zapcore.Entry, fields []zapcore.Field
 		Message:   entry.Message,
 	}
 
-	clone := enc.with(fields)
+	clone := enc.clone()
+	clone.AddFields(fields)
 
 	for i := range clone.fields {
 		switch clone.fields[i].Key {
-- 
GitLab