logrus 仓库地址:https://github.com/sirupsen/logrus
实现代码:
func init() {
// 配置日志格式
logrus.SetReportCaller(true)
logrus.SetFormatter(&MyFormatter{})
logrus.SetLevel(logrus.DebugLevel)
}
type MyFormatter struct{}
func (m *MyFormatter) Format(entry *logrus.Entry) ([]byte, error) {
var b *bytes.Buffer
if entry.Buffer != nil {
b = entry.Buffer
} else {
b = &bytes.Buffer{}
}
r, e := json.Marshal(entry.Caller.Entry)
fmt.Println(string(r), e)
timestamp := entry.Time.Format("2006-01-02 15:04:05")
var newLog string
if entry.Level == logrus.ErrorLevel {
newLog = fmt.Sprintf("%s \u001B[41m[%s]\u001B[0m %s:%d %s\n", timestamp, entry.Level, entry.Caller.File, entry.Caller.Line, entry.Message)
} else if entry.Level == logrus.WarnLevel {
newLog = fmt.Sprintf("%s \u001B[43m[%s]\u001B[0m %s:%d %s\n", timestamp, entry.Level, entry.Caller.File, entry.Caller.Line, entry.Message)
} else if entry.Level == logrus.InfoLevel {
newLog = fmt.Sprintf("%s \u001B[46m[%s]\u001B[0m %s:%d %s\n", timestamp, entry.Level, entry.Caller.File, entry.Caller.Line, entry.Message)
} else {
newLog = fmt.Sprintf("%s \u001B[47m[%s]\u001B[0m %s:%d %s\n", timestamp, entry.Level, entry.Caller.File, entry.Caller.Line, entry.Message)
}
b.WriteString(newLog)
return b.Bytes(), nil
}
func init() {
// 配置日志格式
logrus.SetReportCaller(true)
logrus.SetFormatter(&MyFormatter{})
logrus.SetLevel(logrus.DebugLevel)
}
type MyFormatter struct{}
func (m *MyFormatter) Format(entry *logrus.Entry) ([]byte, error) {
var b *bytes.Buffer
if entry.Buffer != nil {
b = entry.Buffer
} else {
b = &bytes.Buffer{}
}
r, e := json.Marshal(entry.Caller.Entry)
fmt.Println(string(r), e)
timestamp := entry.Time.Format("2006-01-02 15:04:05")
var newLog string
if entry.Level == logrus.ErrorLevel {
newLog = fmt.Sprintf("%s \u001B[41m[%s]\u001B[0m %s:%d %s\n", timestamp, entry.Level, entry.Caller.File, entry.Caller.Line, entry.Message)
} else if entry.Level == logrus.WarnLevel {
newLog = fmt.Sprintf("%s \u001B[43m[%s]\u001B[0m %s:%d %s\n", timestamp, entry.Level, entry.Caller.File, entry.Caller.Line, entry.Message)
} else if entry.Level == logrus.InfoLevel {
newLog = fmt.Sprintf("%s \u001B[46m[%s]\u001B[0m %s:%d %s\n", timestamp, entry.Level, entry.Caller.File, entry.Caller.Line, entry.Message)
} else {
newLog = fmt.Sprintf("%s \u001B[47m[%s]\u001B[0m %s:%d %s\n", timestamp, entry.Level, entry.Caller.File, entry.Caller.Line, entry.Message)
}
b.WriteString(newLog)
return b.Bytes(), nil
}
func init() { // 配置日志格式 logrus.SetReportCaller(true) logrus.SetFormatter(&MyFormatter{}) logrus.SetLevel(logrus.DebugLevel) } type MyFormatter struct{} func (m *MyFormatter) Format(entry *logrus.Entry) ([]byte, error) { var b *bytes.Buffer if entry.Buffer != nil { b = entry.Buffer } else { b = &bytes.Buffer{} } r, e := json.Marshal(entry.Caller.Entry) fmt.Println(string(r), e) timestamp := entry.Time.Format("2006-01-02 15:04:05") var newLog string if entry.Level == logrus.ErrorLevel { newLog = fmt.Sprintf("%s \u001B[41m[%s]\u001B[0m %s:%d %s\n", timestamp, entry.Level, entry.Caller.File, entry.Caller.Line, entry.Message) } else if entry.Level == logrus.WarnLevel { newLog = fmt.Sprintf("%s \u001B[43m[%s]\u001B[0m %s:%d %s\n", timestamp, entry.Level, entry.Caller.File, entry.Caller.Line, entry.Message) } else if entry.Level == logrus.InfoLevel { newLog = fmt.Sprintf("%s \u001B[46m[%s]\u001B[0m %s:%d %s\n", timestamp, entry.Level, entry.Caller.File, entry.Caller.Line, entry.Message) } else { newLog = fmt.Sprintf("%s \u001B[47m[%s]\u001B[0m %s:%d %s\n", timestamp, entry.Level, entry.Caller.File, entry.Caller.Line, entry.Message) } b.WriteString(newLog) return b.Bytes(), nil }
输出日志内容格式:
2023-02-16 09:18:46 [info] /Users/jackey/test/main.go:33 prot:[8081]
2023-02-16 09:18:46 [error] /Users/jackey/test/main.go:34 prot:[8081]
2023-02-16 09:18:46 [info] /Users/jackey/test/main.go:33 prot:[8081]
2023-02-16 09:18:46 [error] /Users/jackey/test/main.go:34 prot:[8081]
2023-02-16 09:18:46 [info] /Users/jackey/test/main.go:33 prot:[8081] 2023-02-16 09:18:46 [error] /Users/jackey/test/main.go:34 prot:[8081]