func (enc *ltsvEncoder) AppendByteString(val []byte) {
	enc.addElementSeparator()
	if enc.allowNewLines && bytes.Contains(val, []byte("\n")) {
		enc.safeAddString("\n", false)
	}
	enc.safeAddByteString(val, false)
	panic("implement me")
}
AppendByteString implements zapcore.PrimitiveArrayEncoder
package flume
import (
	"math"
	"time"
	"unicode/utf8"
	"bytes"
	"encoding/base64"
	"fmt"
	"go.uber.org/zap"
	"go.uber.org/zap/buffer"
	"go.uber.org/zap/zapcore"
	"strings"
)
func init() {
	_ = zap.RegisterEncoder("ltsv", func(cfg zapcore.EncoderConfig) (zapcore.Encoder, error) {
		return NewLTSVEncoder((*EncoderConfig)(&cfg)), nil
	})
}
type ltsvEncoder struct {
	*EncoderConfig
	buf                      *buffer.Buffer
	allowTabs                bool
	allowNewLines            bool
	skipNextElementSeparator bool
	lastElementWasMultiline  bool
	fieldNamePrefix          string
	nestingLevel             int
	blankKey                 string
	binaryEncoder            func([]byte) string
}
func NewLTSVEncoder(cfg *EncoderConfig) Encoder {
	return &ltsvEncoder{
		EncoderConfig: cfg,
		buf:           bufPool.Get(),
		blankKey:      "_",
		binaryEncoder: base64.StdEncoding.EncodeToString,
	}
}
func (enc *ltsvEncoder) AddBinary(key string, value []byte) {
	enc.AddString(key, enc.binaryEncoder(value))
}
func (enc *ltsvEncoder) AddArray(key string, arr zapcore.ArrayMarshaler) error {
	enc.addKey(key)
	return enc.AppendArray(arr)
}
func (enc *ltsvEncoder) AddObject(key string, obj zapcore.ObjectMarshaler) error {
	enc.addKey(key)
	return enc.AppendObject(obj)
}
func (enc *ltsvEncoder) AddBool(key string, val bool) {
	enc.addKey(key)
	enc.AppendBool(val)
}
func (enc *ltsvEncoder) AddComplex128(key string, val complex128) {
	enc.addKey(key)
	enc.AppendComplex128(val)
}
func (enc *ltsvEncoder) AddDuration(key string, val time.Duration) {
	enc.addKey(key)
	enc.AppendDuration(val)
}
func (enc *ltsvEncoder) AddFloat64(key string, val float64) {
	enc.addKey(key)
	enc.AppendFloat64(val)
}
func (enc *ltsvEncoder) AddInt64(key string, val int64) {
	enc.addKey(key)
	enc.AppendInt64(val)
}
func (enc *ltsvEncoder) AddReflected(key string, obj interface{}) error {
	enc.addKey(key)
	return enc.AppendReflected(obj)
}
func (enc *ltsvEncoder) OpenNamespace(key string) {
	switch len(enc.fieldNamePrefix) {
	case 0:
		enc.fieldNamePrefix = key
	default:
		enc.fieldNamePrefix = enc.fieldNamePrefix + "." + key
	}
}
func (enc *ltsvEncoder) AddString(key, val string) {
	enc.addKey(key)
	enc.AppendString(val)
}
func (enc *ltsvEncoder) AddByteString(key string, value []byte) {
	enc.addKey(key)
	enc.AppendByteString(value)
}
func (enc *ltsvEncoder) AddTime(key string, val time.Time) {
	enc.addKey(key)
	enc.AppendTime(val)
}
func (enc *ltsvEncoder) AddUint64(key string, val uint64) {
	enc.addKey(key)
	enc.AppendUint64(val)
}
func (enc *ltsvEncoder) AppendArray(arr zapcore.ArrayMarshaler) error {
	enc.addElementSeparator()
	enc.buf.AppendByte('[')
	enc.skipNextElementSeparator = true
	err := arr.MarshalLogArray(enc)
	enc.buf.AppendByte(']')
	enc.skipNextElementSeparator = false
	return err
}
func (enc *ltsvEncoder) AppendObject(obj zapcore.ObjectMarshaler) error {
	enc.addElementSeparator()
	enc.nestingLevel++
	enc.skipNextElementSeparator = true
	enc.buf.AppendByte('{')
	err := obj.MarshalLogObject(enc)
	enc.buf.AppendByte('}')
	enc.skipNextElementSeparator = false
	enc.nestingLevel--
	return err
}
func (enc *ltsvEncoder) AppendBool(val bool) {
	enc.addElementSeparator()
	enc.buf.AppendBool(val)
}
func (enc *ltsvEncoder) AppendComplex128(val complex128) {
	enc.addElementSeparator()
	r, i := real(val), imag(val)
	enc.buf.AppendFloat(r, 64)
	enc.buf.AppendByte('+')
	enc.buf.AppendFloat(i, 64)
	enc.buf.AppendByte('i')
}
func (enc *ltsvEncoder) AppendDuration(val time.Duration) {
	enc.EncodeDuration(val, enc)
}
func (enc *ltsvEncoder) AppendInt64(val int64) {
	enc.addElementSeparator()
	enc.buf.AppendInt(val)
}
func (enc *ltsvEncoder) AppendReflected(val interface{}) error {
	enc.AppendString(fmt.Sprintf("%+v", val))
	return nil
}
func (enc *ltsvEncoder) AppendString(val string) {
	enc.addElementSeparator()
	if enc.allowNewLines && strings.Contains(val, "\n") {
		enc.safeAddString("\n", false)
	}
	enc.safeAddString(val, false)
}