diff --git a/logs/zap/core.go b/logs/zap/core.go index a6c1c2ecd7e9e2075d4a008bddb4e7911278d64d..aee31e41c7c676d282724b3033c0e364f9400b1b 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 62ca529d107ea611332ee89716ddbf625c2234df..d7db9b301a7a41c9b869ddcc0c06146afafe9780 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 {