From 7a9e717dc0c5cb5059ad477e35945e31bd8304a1 Mon Sep 17 00:00:00 2001 From: Luca Ruggieri <35179996+lruggieri@users.noreply.github.com> Date: Tue, 9 Nov 2021 13:26:20 +0900 Subject: [PATCH] Added SkipLineEnding to zapcore.EncoderConfig (#989) * Added SkipLineEnding to zapcore.EncoderConfig * zapcore: LineEnding logic moved to newJSONEncoder --- zapcore/console_encoder.go | 6 +----- zapcore/encoder.go | 17 +++++++++-------- zapcore/encoder_test.go | 20 ++++++++++++++++++++ zapcore/json_encoder.go | 12 +++++++----- 4 files changed, 37 insertions(+), 18 deletions(-) diff --git a/zapcore/console_encoder.go b/zapcore/console_encoder.go index 2307af404..1aa5dc364 100644 --- a/zapcore/console_encoder.go +++ b/zapcore/console_encoder.go @@ -125,11 +125,7 @@ func (c consoleEncoder) EncodeEntry(ent Entry, fields []Field) (*buffer.Buffer, line.AppendString(ent.Stack) } - if c.LineEnding != "" { - line.AppendString(c.LineEnding) - } else { - line.AppendString(DefaultLineEnding) - } + line.AppendString(c.LineEnding) return line, nil } diff --git a/zapcore/encoder.go b/zapcore/encoder.go index 6601ca166..ad8712aba 100644 --- a/zapcore/encoder.go +++ b/zapcore/encoder.go @@ -312,14 +312,15 @@ func (e *NameEncoder) UnmarshalText(text []byte) error { type EncoderConfig struct { // Set the keys used for each log entry. If any key is empty, that portion // of the entry is omitted. - MessageKey string `json:"messageKey" yaml:"messageKey"` - LevelKey string `json:"levelKey" yaml:"levelKey"` - TimeKey string `json:"timeKey" yaml:"timeKey"` - NameKey string `json:"nameKey" yaml:"nameKey"` - CallerKey string `json:"callerKey" yaml:"callerKey"` - FunctionKey string `json:"functionKey" yaml:"functionKey"` - StacktraceKey string `json:"stacktraceKey" yaml:"stacktraceKey"` - LineEnding string `json:"lineEnding" yaml:"lineEnding"` + MessageKey string `json:"messageKey" yaml:"messageKey"` + LevelKey string `json:"levelKey" yaml:"levelKey"` + TimeKey string `json:"timeKey" yaml:"timeKey"` + NameKey string `json:"nameKey" yaml:"nameKey"` + CallerKey string `json:"callerKey" yaml:"callerKey"` + FunctionKey string `json:"functionKey" yaml:"functionKey"` + StacktraceKey string `json:"stacktraceKey" yaml:"stacktraceKey"` + SkipLineEnding bool `json:"skipLineEnding" yaml:"skipLineEnding"` + LineEnding string `json:"lineEnding" yaml:"lineEnding"` // Configure the primitive representations of common complex types. For // example, some users may want all time.Times serialized as floating-point // seconds since epoch, while others may prefer ISO8601 strings. diff --git a/zapcore/encoder_test.go b/zapcore/encoder_test.go index b53a90849..1bb5a3cea 100644 --- a/zapcore/encoder_test.go +++ b/zapcore/encoder_test.go @@ -114,6 +114,26 @@ func TestEncoderConfiguration(t *testing.T) { expectedJSON: `{"L":"info","T":0,"N":"main","C":"foo.go:42","F":"foo.Foo","M":"hello","S":"fake-stack"}` + "\n", expectedConsole: "0\tinfo\tmain\tfoo.go:42\tfoo.Foo\thello\nfake-stack\n", }, + { + desc: "skip line ending if SkipLineEnding is 'true'", + cfg: EncoderConfig{ + LevelKey: "L", + TimeKey: "T", + MessageKey: "M", + NameKey: "N", + CallerKey: "C", + FunctionKey: "F", + StacktraceKey: "S", + LineEnding: base.LineEnding, + SkipLineEnding: true, + EncodeTime: base.EncodeTime, + EncodeDuration: base.EncodeDuration, + EncodeLevel: base.EncodeLevel, + EncodeCaller: base.EncodeCaller, + }, + expectedJSON: `{"L":"info","T":0,"N":"main","C":"foo.go:42","F":"foo.Foo","M":"hello","S":"fake-stack"}`, + expectedConsole: "0\tinfo\tmain\tfoo.go:42\tfoo.Foo\thello\nfake-stack", + }, { desc: "skip level if LevelKey is omitted", cfg: EncoderConfig{ diff --git a/zapcore/json_encoder.go b/zapcore/json_encoder.go index 7c3faf6c5..3e00a6b6e 100644 --- a/zapcore/json_encoder.go +++ b/zapcore/json_encoder.go @@ -82,6 +82,12 @@ func NewJSONEncoder(cfg EncoderConfig) Encoder { } func newJSONEncoder(cfg EncoderConfig, spaced bool) *jsonEncoder { + if cfg.SkipLineEnding { + cfg.LineEnding = "" + } else if cfg.LineEnding == "" { + cfg.LineEnding = DefaultLineEnding + } + return &jsonEncoder{ EncoderConfig: &cfg, buf: bufferpool.Get(), @@ -418,11 +424,7 @@ func (enc *jsonEncoder) EncodeEntry(ent Entry, fields []Field) (*buffer.Buffer, final.AddString(final.StacktraceKey, ent.Stack) } final.buf.AppendByte('}') - if final.LineEnding != "" { - final.buf.AppendString(final.LineEnding) - } else { - final.buf.AppendString(DefaultLineEnding) - } + final.buf.AppendString(final.LineEnding) ret := final.buf putJSONEncoder(final)