axonhub / internal /log /console_json_encoder.go
llzai's picture
Upload 1793 files
9853396 verified
package log
import (
"encoding/json"
"go.uber.org/zap/buffer"
"go.uber.org/zap/zapcore"
)
type ConsoleJSONEncoder struct {
zapcore.Encoder
cfg zapcore.EncoderConfig
}
func NewConsoleJSONEncoder(cfg zapcore.EncoderConfig) zapcore.Encoder {
if len(cfg.ConsoleSeparator) == 0 {
// Use a default delimiter of '\t' for backwards compatibility
cfg.ConsoleSeparator = "\t"
}
encoder := zapcore.NewConsoleEncoder(cfg)
return &ConsoleJSONEncoder{
Encoder: encoder,
cfg: cfg,
}
}
func (c *ConsoleJSONEncoder) Clone() zapcore.Encoder {
return &ConsoleJSONEncoder{Encoder: c.Encoder.Clone(), cfg: c.cfg}
}
func (enc *ConsoleJSONEncoder) EncodeEntry(
ent zapcore.Entry,
fields []zapcore.Field,
) (*buffer.Buffer, error) {
line, err := enc.Encoder.EncodeEntry(ent, nil)
if err != nil {
return line, err
}
if len(fields) == 0 {
return line, nil
}
encoder := zapcore.NewMapObjectEncoder()
addFields(encoder, fields)
context, err := json.MarshalIndent(encoder.Fields, "", " ")
if err != nil {
return line, err
}
line.AppendString(string(context))
if enc.cfg.LineEnding != "" {
line.AppendString(enc.cfg.LineEnding)
} else {
line.AppendString(zapcore.DefaultLineEnding)
}
return line, nil
}
func addFields(enc ObjectEncoder, fields []Field) {
for i := range fields {
fields[i].AddTo(enc)
}
}