Spaces:
Paused
Paused
| 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) | |
| } | |
| } | |