github.com/goravel/framework@v1.13.9/log/logger/daily.go (about) 1 package logger 2 3 import ( 4 "errors" 5 "path/filepath" 6 "strings" 7 "time" 8 9 rotatelogs "github.com/goravel/file-rotatelogs/v2" 10 "github.com/rifflock/lfshook" 11 "github.com/sirupsen/logrus" 12 13 "github.com/goravel/framework/contracts/config" 14 "github.com/goravel/framework/log/formatter" 15 "github.com/goravel/framework/support" 16 ) 17 18 type Daily struct { 19 config config.Config 20 } 21 22 func NewDaily(config config.Config) *Daily { 23 return &Daily{ 24 config: config, 25 } 26 } 27 28 func (daily *Daily) Handle(channel string) (logrus.Hook, error) { 29 var hook logrus.Hook 30 logPath := daily.config.GetString(channel + ".path") 31 if logPath == "" { 32 return hook, errors.New("error log path") 33 } 34 35 ext := filepath.Ext(logPath) 36 logPath = strings.ReplaceAll(logPath, ext, "") 37 logPath = filepath.Join(support.RelativePath, logPath) 38 39 writer, err := rotatelogs.New( 40 logPath+"-%Y-%m-%d"+ext, 41 rotatelogs.WithRotationTime(time.Duration(24)*time.Hour), 42 rotatelogs.WithRotationCount(uint(daily.config.GetInt(channel+".days"))), 43 ) 44 if err != nil { 45 return hook, errors.New("Config local file system for logger error: " + err.Error()) 46 } 47 48 levels := getLevels(daily.config.GetString(channel + ".level")) 49 writerMap := lfshook.WriterMap{} 50 for _, level := range levels { 51 writerMap[level] = writer 52 } 53 54 return lfshook.NewHook( 55 writerMap, 56 formatter.NewGeneral(daily.config), 57 ), nil 58 }