package logger import ( "io" "github.com/sirupsen/logrus" "gopkg.in/natefinch/lumberjack.v2" ) type RotateFileConfig struct { Filename string MaxSize int MaxBackups int MaxAge int Level logrus.Level LocalTime bool Formatter logrus.Formatter } type RotateFileHook struct { Config RotateFileConfig logWriter io.Writer } func NewRotateFileHook(config RotateFileConfig) (logrus.Hook, error) { hook := RotateFileHook{ Config: config, } hook.logWriter = &lumberjack.Logger{ Filename: config.Filename, MaxSize: config.MaxSize, MaxBackups: config.MaxBackups, MaxAge: config.MaxAge, LocalTime: config.LocalTime, } return &hook, nil } func (hook *RotateFileHook) Levels() []logrus.Level { return logrus.AllLevels[:hook.Config.Level+1] } func (hook *RotateFileHook) Fire(entry *logrus.Entry) (err error) { b, err := hook.Config.Formatter.Format(entry) if err != nil { return err } hook.logWriter.Write(b) return nil }