| package logx |
|
|
| import ( |
| "bytes" |
| "encoding/json" |
| "fmt" |
| "github.com/sirupsen/logrus" |
| "strings" |
| ) |
|
|
| type TextFormatter struct { |
| } |
|
|
| func (f *TextFormatter) Format(entry *Entry) ([]byte, error) { |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| 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) |
| } |
| |
| _, _ = 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 { |
| |
| _, _ = 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 { |
| |
| _, _ = 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 { |
| |
| _, _ = fmt.Fprintf(b, "\u001B[%dm%s\u001B[0m\t", 36, gUuid) |
| delete(entry.Data, GuuIDKey) |
| } |
|
|
| if traceId, ok := entry.Data[TraceIdKey]; ok { |
| |
| _, _ = 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 { |
| |
| 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 |
| } |
|
|