package zapcore
import (
)
var _sliceEncoderPool = sync.Pool{
New: func() interface{} {
return &sliceArrayEncoder{elems: make([]interface{}, 0, 2)}
},
}
func () *sliceArrayEncoder {
return _sliceEncoderPool.Get().(*sliceArrayEncoder)
}
func ( *sliceArrayEncoder) {
.elems = .elems[:0]
_sliceEncoderPool.Put()
}
type consoleEncoder struct {
*jsonEncoder
}
func ( EncoderConfig) Encoder {
if .ConsoleSeparator == "" {
.ConsoleSeparator = "\t"
}
return consoleEncoder{newJSONEncoder(, true)}
}
func ( consoleEncoder) () Encoder {
return consoleEncoder{.jsonEncoder.Clone().(*jsonEncoder)}
}
func ( consoleEncoder) ( Entry, []Field) (*buffer.Buffer, error) {
:= bufferpool.Get()
:= getSliceEncoder()
if .TimeKey != "" && .EncodeTime != nil {
.EncodeTime(.Time, )
}
if .LevelKey != "" && .EncodeLevel != nil {
.EncodeLevel(.Level, )
}
if .LoggerName != "" && .NameKey != "" {
:= .EncodeName
if == nil {
= FullNameEncoder
}
(.LoggerName, )
}
if .Caller.Defined {
if .CallerKey != "" && .EncodeCaller != nil {
.EncodeCaller(.Caller, )
}
if .FunctionKey != "" {
.AppendString(.Caller.Function)
}
}
for := range .elems {
if > 0 {
.AppendString(.ConsoleSeparator)
}
fmt.Fprint(, .elems[])
}
putSliceEncoder()
if .MessageKey != "" {
.addSeparatorIfNecessary()
.AppendString(.Message)
}
.writeContext(, )
if .Stack != "" && .StacktraceKey != "" {
.AppendByte('\n')
.AppendString(.Stack)
}
.AppendString(.LineEnding)
return , nil
}
func ( consoleEncoder) ( *buffer.Buffer, []Field) {
:= .jsonEncoder.Clone().(*jsonEncoder)
defer func() {
.buf.Free()
putJSONEncoder()
}()
addFields(, )
.closeOpenNamespaces()
if .buf.Len() == 0 {
return
}
.addSeparatorIfNecessary()
.AppendByte('{')
.Write(.buf.Bytes())
.AppendByte('}')
}
func ( consoleEncoder) ( *buffer.Buffer) {
if .Len() > 0 {
.AppendString(.ConsoleSeparator)
}
}