Select Git revision
channel_core_test.go
entry_encoder_slow.go 1.70 KiB
package zap
import (
"fmt"
"maps"
oid "git.perx.ru/perxis/perxis-go/id"
"git.perx.ru/perxis/perxis-go/logs"
"git.perx.ru/perxis/perxis-go/pkg/id"
"go.uber.org/zap/zapcore"
)
type EncoderSlow interface {
zapcore.ObjectEncoder
Clone() EncoderSlow
EncodeEntry(zapcore.Entry, []zapcore.Field) (*logs.Entry, error)
}
type entryEncoderSlow struct {
*zapcore.MapObjectEncoder
}
func NewEntryEncoderSlow() EncoderSlow {
return &entryEncoderSlow{MapObjectEncoder: zapcore.NewMapObjectEncoder()}
}
func (enc *entryEncoderSlow) Clone() EncoderSlow {
return enc.clone()
}
func (enc *entryEncoderSlow) clone() *entryEncoderSlow {
objEnc := zapcore.NewMapObjectEncoder()
maps.Copy(objEnc.Fields, enc.MapObjectEncoder.Fields)
return &entryEncoderSlow{MapObjectEncoder: objEnc}
}
func (enc *entryEncoderSlow) EncodeEntry(entry zapcore.Entry, fields []zapcore.Field) (*logs.Entry, error) {
clone := enc.clone()
for i := range fields {
fields[i].AddTo(clone)
}
ent := &logs.Entry{
ID: id.GenerateNewID(),
Timestamp: entry.Time,
LogLevel: logs.Level(entry.Level),
Message: entry.Message,
}
ent.Category, _ = clone.Fields["category"].(string)
ent.Component, _ = clone.Fields["component"].(string)
ent.Event, _ = clone.Fields["event"].(string)
ent.ObjectID, _ = clone.Fields["object"].(*oid.ObjectId)
ent.CallerID, _ = clone.Fields["caller"].(*oid.ObjectId)
ent.Attr = clone.Fields["attr"]
if err, _ := clone.Fields["error"].(error); err != nil {
ent.Message = fmt.Sprintf("%s. Error: %s", ent.Message, err.Error())
}
if tags, ok := clone.Fields["tags"].([]any); ok {
for i := range tags {
if tag, ok := tags[i].(string); ok {
ent.Tags = append(ent.Tags, tag)
}
}
}
return ent, nil
}