logrus内置的日志格式只有两种:
logrus.TextFormatter:纯文本
logrus.JSONFormatter:JSON
源码中有这个接口:
// The Formatter interface is used to implement a custom Formatter. It takes an
// `Entry`. It exposes all the fields, including the default ones:
//
// * `entry.Data["msg"]`. The message passed from Info, Warn, Error ..
// * `entry.Data["time"]`. The timestamp.
// * `entry.Data["level"]. The level the entry was logged at.
//
// Any additional fields added with `WithField` or `WithFields` are also in
// `entry.Data`. Format is expected to return an array of bytes which are then
// logged to `logger.Out`.
type Formatter interface {
Format(*Entry) ([]byte, error)
}
注意看它的注释,用户如果自定义日志输出,实现这个接口即可。
我们不想要它自带的TextFormatter和JSONFormatter,来自定义一下:
//Custom log format definition
type MyFormatter struct{}
func (s *MyFormatter) Format(entry *logrus.Entry) ([]byte, error) {
timestamp := time.Now().Local().Format("2006/01/02 15:04:05")
msg := fmt.Sprintf("%s [%s] %s\n", timestamp, strings.ToUpper(entry.Level.String()), entry.Message)
return []byte(msg), nil
}
设置使用该格式:
logrus.SetFormatter(new(MyFormatter))
logrus.SetOutput(os.Stdout)