package zapjournal
import (
)
const hdrLen = 8
const (
priEmerg = string('0' + iota)
priAlert
priCrit
priErr
priWarning
priNotice
priInfo
priDebug
)
type varsEncoder struct {
prefix string
buf []byte
hdr int
json jsonEncoder
}
func ( *varsEncoder) ( string) {
.beginVar(, false)
}
func ( *varsEncoder) ( string) {
.beginVar(, true)
}
func ( *varsEncoder) ( string, bool) {
.buf = appendVarName(.buf, .prefix, )
if ! {
.buf = append(.buf, '=')
return
}
.buf = append(.buf, '\n')
.hdr = len(.buf)
.buf = append(.buf, make([]byte, hdrLen)...)
}
func ( *varsEncoder) () {
if .hdr != 0 {
:= uint64(len(.buf) - .hdr - hdrLen)
binary.LittleEndian.PutUint64(.buf[.hdr:], )
.hdr = 0
}
.buf = append(.buf, '\n')
}
func ( *varsEncoder) ( string) {
.prefix += "_" +
}
func ( *varsEncoder) ( string, []byte) {
.beginMultilineVar()
.buf = append(.buf, ...)
.endVar()
}
func ( *varsEncoder) ( string, []byte) {
:= bytes.Contains(, []byte{'\n'})
.beginVar(, )
.buf = append(.buf, ...)
.endVar()
}
func ( *varsEncoder) (, string) {
:= strings.Contains(, "\n")
.beginVar(, )
.buf = append(.buf, ...)
.endVar()
}
func ( *varsEncoder) ( string, bool) {
.beginSinglelineVar()
.buf = strconv.AppendBool(.buf, )
.endVar()
}
func ( *varsEncoder) ( string, complex128) {
.addComplex(, , 128)
}
func ( *varsEncoder) ( string, complex64) {
.addComplex(, complex128(), 64)
}
func ( *varsEncoder) ( string, complex128, int) {
.beginSinglelineVar()
.buf = strconvAppendComplex(.buf, , 'g', -1, )
.endVar()
}
func ( *varsEncoder) ( string, time.Duration) {
.AddString(, .String())
}
func ( *varsEncoder) ( string, float64) {
.addFloat(, , 64)
}
func ( *varsEncoder) ( string, float32) {
.addFloat(, float64(), 32)
}
func ( *varsEncoder) ( string, float64, int) {
.beginSinglelineVar()
.buf = strconv.AppendFloat(.buf, , 'g', -1, )
.endVar()
}
func ( *varsEncoder) ( string, int) {
.AddInt64(, int64())
}
func ( *varsEncoder) ( string, int64) {
.beginSinglelineVar()
.buf = strconv.AppendInt(.buf, , 10)
.endVar()
}
func ( *varsEncoder) ( string, int32) {
.AddInt64(, int64())
}
func ( *varsEncoder) ( string, int16) {
.AddInt64(, int64())
}
func ( *varsEncoder) ( string, int8) {
.AddInt64(, int64())
}
func ( *varsEncoder) ( string, uint) {
.AddUint64(, uint64())
}
func ( *varsEncoder) ( string, uint64) {
.beginSinglelineVar()
.buf = strconv.AppendUint(.buf, , 10)
.endVar()
}
func ( *varsEncoder) ( string, uint32) {
.AddUint64(, uint64())
}
func ( *varsEncoder) ( string, uint16) {
.AddUint64(, uint64())
}
func ( *varsEncoder) ( string, uint8) {
.AddUint64(, uint64())
}
func ( *varsEncoder) ( string, uintptr) {
.beginSinglelineVar()
.buf = strconvAppendUintptr(.buf, )
.endVar()
}
func ( *varsEncoder) ( string, time.Time) {
.beginSinglelineVar()
.buf = .AppendFormat(.buf, time.RFC3339Nano)
.endVar()
}
func ( *varsEncoder) ( string, any) error {
.beginMultilineVar()
:= bytes.NewBuffer(.buf)
:= json.NewEncoder()
.SetEscapeHTML(false)
:= .Encode()
.buf = .Bytes()
.buf = .buf[:len(.buf)-1]
.endVar()
return
}
func ( *varsEncoder) ( string, zapcore.ArrayMarshaler) error {
.beginMultilineVar()
.json.appendOpenArray()
:= .MarshalLogArray(&.json)
.json.complete()
.json.appendCloseArray()
.endVar()
return
}
func ( *varsEncoder) ( string, zapcore.ObjectMarshaler) error {
.beginMultilineVar()
.json.appendOpenObject()
:= .MarshalLogObject(&.json)
.json.complete()
.json.appendCloseObject()
.endVar()
return
}
func ( *varsEncoder) ( zapcore.Entry) {
:= .prefix
.prefix = ""
.AddString("MESSAGE", .Message)
if := .Caller; .Defined {
.AddString("CODE_FILE", .File)
.AddInt("CODE_LINE", .Line)
.AddString("CODE_FUNC", .Function)
}
:= priNotice
switch .Level {
case zapcore.DebugLevel:
= priDebug
case zapcore.InfoLevel:
= priInfo
case zapcore.WarnLevel:
= priWarning
case zapcore.ErrorLevel:
= priErr
case zapcore.DPanicLevel:
= priCrit
case zapcore.PanicLevel:
= priAlert
case zapcore.FatalLevel:
= priEmerg
}
.AddString("PRIORITY", )
.AddString("LOG_LEVEL", .Level.String())
if !.Time.IsZero() {
.AddTime("TIMESTAMP", .Time)
}
if .LoggerName != "" {
.AddString("LOG_NAME", .LoggerName)
}
if .Stack != "" {
.AddString("STACK", .Stack)
}
.prefix =
}
func ( *varsEncoder) ( zapcore.Entry, []zapcore.Field) *varsEncoder {
= cloneVarsEncoder()
addFields(, )
.encodeEntryVars()
return
}
func ( zapcore.ObjectEncoder, []zapcore.Field) {
for := range {
[].AddTo()
}
}