package main import ( "os" nested "github.com/antonfisher/nested-logrus-formatter" "github.com/sirupsen/logrus" "gopkg.in/natefinch/lumberjack.v2" ) type FileHook struct { formatter logrus.Formatter fileLogger *lumberjack.Logger } func (hook *FileHook) Fire(entry *logrus.Entry) error { line, err := hook.formatter.Format(entry) if err != nil { return err } _, err = hook.fileLogger.Write(line) return err } func (hook *FileHook) Levels() []logrus.Level { return logrus.AllLevels } func main() { // 创建文件输出 fileLogger := &lumberjack.Logger{ Filename: "logrus.log", MaxSize: 1, MaxBackups: 3, MaxAge: 30, Compress: true, } // 创建 nested 格式化器(文件用) fileFormatter := &nested.Formatter{ HideKeys: true, FieldsOrder: []string{"component", "category"}, NoColors: true, // 文件不要颜色 ShowFullLevel: true, // 显示完整级别 TimestampFormat: "2006-01-02 15:04:05.000", } // 文件 Hook fileHook := &FileHook{ fileLogger: fileLogger, formatter: fileFormatter, } logrus.AddHook(fileHook) // 显示具体日志位置。 //logrus.SetReportCaller(true) // 控制台输出(带颜色) logrus.SetOutput(os.Stdout) logrus.SetFormatter(&nested.Formatter{ HideKeys: true, FieldsOrder: []string{"component", "category"}, NoColors: false, // 控制台带颜色 }) logrus.SetLevel(logrus.InfoLevel) // 记录日志 logrus.Info("This is an info message") logrus.Warn("This is a warning message") logrus.Error("This is an error message") // 测试带字段的日志 logrus.WithFields(logrus.Fields{ "component": "auth", "user_id": 12345, "ip": "192.168.1.100", }).Info("User login success") }