mar-755-KK / pkg /logx /text_formater.go
aurorax-neo's picture
init
a4468f1
package logx
import (
"bytes"
"encoding/json"
"fmt"
"github.com/sirupsen/logrus"
"strings"
)
type TextFormatter struct {
}
func (f *TextFormatter) Format(entry *Entry) ([]byte, error) {
//前景色 背景色
// 30 40 黑色
// 31 41 红色
// 32 42 绿色
// 33 43 黄色
// 34 44 蓝色
// 35 45 紫色
// 36 46 青色
// 37 47 白色
var color int
switch entry.Level {
case logrus.DebugLevel, logrus.TraceLevel:
color = 37
case logrus.WarnLevel:
color = 33
case logrus.ErrorLevel:
color = 31
case logrus.InfoLevel:
color = 36
case logrus.FatalLevel:
color = 41
case logrus.PanicLevel:
color = 44
default:
color = 36
}
var b *bytes.Buffer
if entry.Buffer != nil {
b = entry.Buffer
} else {
b = &bytes.Buffer{}
}
if entry.HasCaller() {
_, _ = fmt.Fprintf(b, "\u001B[%dmFunc\u001B[0m %v():%d\n", color, entry.Caller.Function, entry.Caller.Line)
}
//entry.Message = strings.TrimSuffix(entry.Message, "\n")
_, _ = fmt.Fprintf(b, "%s \x1b[%dm%s\x1b[0m", entry.Time.Format("2006-01-02 15:04:05:06"),
color, func() string {
level := strings.ToUpper(entry.Level.String())
if len(level) < 7 {
for i := len(level); i < 7; i++ {
level += " "
}
}
return level
}())
if tag, ok := entry.Data[TagKey]; ok {
// TAG:
_, _ = fmt.Fprintf(b, "\u001B[%dm%s\u001B[0m\t", 31, strings.ToUpper(tag.(string)))
delete(entry.Data, TagKey)
}
_, _ = fmt.Fprintf(b, " %-44s", entry.Message)
if schoolId, ok := entry.Data[SchoolIDKey]; ok {
_, _ = fmt.Fprintf(b, "[\u001B[%dm%v\u001B[0m]\t", 35, schoolId)
delete(entry.Data, SchoolIDKey)
}
{
userId, uidOk := entry.Data[UserIDKey]
username, unameOk := entry.Data[UsernameKey]
if uidOk && unameOk {
// USER_ID: USERNAME:
_, _ = fmt.Fprintf(b, "[\u001B[%dm%v(%v)\u001B[0m]\t", 36, username, userId)
delete(entry.Data, UserIDKey)
delete(entry.Data, UsernameKey)
}
}
if gUuid, ok := entry.Data[GuuIDKey]; ok {
// TAG:
_, _ = fmt.Fprintf(b, "\u001B[%dm%s\u001B[0m\t", 36, gUuid)
delete(entry.Data, GuuIDKey)
}
if traceId, ok := entry.Data[TraceIdKey]; ok {
// TRACE_ID:
_, _ = fmt.Fprintf(b, "\u001B[%dm%s\u001B[0m\t", 34, traceId)
delete(entry.Data, TraceIdKey)
}
if stack, ok := entry.Data[StackKey]; ok {
_, _ = fmt.Fprintf(b, "\u001B[%dm%s\u001B[0m\t", 33, stack)
delete(entry.Data, StackKey)
}
if len(entry.Data) > 0 {
// DATA:
var buf bytes.Buffer
_ = json.NewEncoder(&buf).Encode(&entry.Data)
_, _ = fmt.Fprintf(b, "\u001B[%dm%v\u001B[0m\t", 34, strings.TrimSuffix(buf.String(), "\n"))
}
b.WriteByte('\n')
return b.Bytes(), nil
}