in logging/logging.go [152:242]
func AssembleMsg(depth int, logLevel, msg string, err error, keysAndValues ...interface{}) string {
sb := strings.Builder{}
sb.Grow(defaultLogMsgBufferSize)
file, line := caller(depth)
timeStr := time.Now().Format("2006-01-02 15:04:05.520")
caller := fmt.Sprintf("%s:%d", file, line)
sb.WriteString("{")
sb.WriteByte('"')
sb.WriteString("timestamp")
sb.WriteByte('"')
sb.WriteByte(':')
sb.WriteByte('"')
sb.WriteString(timeStr)
sb.WriteByte('"')
sb.WriteByte(',')
sb.WriteByte('"')
sb.WriteString("caller")
sb.WriteByte('"')
sb.WriteByte(':')
sb.WriteByte('"')
sb.WriteString(caller)
sb.WriteByte('"')
sb.WriteByte(',')
sb.WriteByte('"')
sb.WriteString("logLevel")
sb.WriteByte('"')
sb.WriteByte(':')
sb.WriteByte('"')
sb.WriteString(logLevel)
sb.WriteByte('"')
sb.WriteByte(',')
sb.WriteByte('"')
sb.WriteString("msg")
sb.WriteByte('"')
sb.WriteByte(':')
data := toSafeJSONString(msg)
sb.Write(data)
kvLen := len(keysAndValues)
if kvLen&1 != 0 {
sb.WriteByte(',')
sb.WriteByte('"')
sb.WriteString("kvs")
sb.WriteByte('"')
sb.WriteByte(':')
s := fmt.Sprintf("%+v", keysAndValues)
data := toSafeJSONString(s)
sb.Write(data)
} else if kvLen != 0 {
for i := 0; i < kvLen; {
k := keysAndValues[i]
v := keysAndValues[i+1]
kStr, kIsStr := k.(string)
if !kIsStr {
kStr = fmt.Sprintf("%+v", k)
}
sb.WriteByte(',')
data := toSafeJSONString(kStr)
sb.Write(data)
sb.WriteByte(':')
switch v.(type) {
case string:
data := toSafeJSONString(v.(string))
sb.Write(data)
case error:
data := toSafeJSONString(v.(error).Error())
sb.Write(data)
default:
if vbs, err := json.Marshal(v); err != nil {
s := fmt.Sprintf("%+v", v)
data := toSafeJSONString(s)
sb.Write(data)
} else {
sb.Write(vbs)
}
}
i = i + 2
}
}
sb.WriteByte('}')
if err != nil {
sb.WriteString("\n")
sb.WriteString(fmt.Sprintf("%+v", err))
}
return sb.String()
}