github.com/dfklegend/cell2/utils@v0.0.0-20240402033734-a0a9f3d9335d/logger/proxy/proxy.go (about) 1 package proxy 2 3 import ( 4 "fmt" 5 "time" 6 7 rotatelogs "github.com/lestrrat-go/file-rotatelogs" 8 "github.com/rifflock/lfshook" 9 "github.com/sirupsen/logrus" 10 11 "github.com/dfklegend/cell2/utils/logger/interfaces" 12 logruswrapper "github.com/dfklegend/cell2/utils/logger/logrus" 13 ) 14 15 type LogProxy struct { 16 Name string 17 Log interfaces.Logger 18 logger *logrus.Logger 19 } 20 21 func NewLog() *LogProxy { 22 return &LogProxy{} 23 } 24 25 // TODO: 控制台和文件formatter保持一致 26 func (p *LogProxy) Init(name string, level logrus.Level) *LogProxy { 27 p.Name = name 28 29 plog := logrus.New() 30 f := NewSimpleLogFormat(name) 31 plog.SetFormatter(f) 32 plog.Level = level 33 34 log := plog.WithFields(logrus.Fields{ 35 "source": name, 36 }) 37 38 p.Log, p.logger = logruswrapper.NewWithFieldLogger(log), plog 39 return p 40 } 41 42 func (p *LogProxy) SetLogLevel(level logrus.Level) *LogProxy { 43 p.logger.SetLevel(level) 44 return p 45 } 46 47 func (p *LogProxy) SetFormatter(formatter logrus.Formatter) *LogProxy { 48 p.logger.SetFormatter(formatter) 49 return p 50 } 51 52 func (p *LogProxy) EnableFileLog(prefix, logDir string) *LogProxy { 53 path := fmt.Sprintf("%v/%v.%v.%v.log", logDir, prefix, p.Name, "%Y%m%d%H%M") 54 writer, _ := rotatelogs.New( 55 path, 56 rotatelogs.WithLinkName(path), 57 // 7 天过期 58 rotatelogs.WithMaxAge(time.Duration(7*24*3600)*time.Second), 59 // 1 day rotation time 60 rotatelogs.WithRotationTime(time.Duration(24*3600)*time.Second), 61 // 最大文件 62 rotatelogs.WithRotationSize(5*1024*1024), 63 ) 64 65 p.logger.Hooks.Add(lfshook.NewHook( 66 writer, 67 &logrus.TextFormatter{ 68 DisableQuote: true, 69 }, 70 )) 71 return p 72 }