123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package util
- /**
- 日志文件自动切换,默认保留15天内日志
- **/
- import (
- "app.yhyue.com/moapp/jybase/go-xweb/xweb"
- "github.com/robfig/cron"
- "log"
- "os"
- "path/filepath"
- "regexp"
- "time"
- )
- // 日志格式
- var fileReg = regexp.MustCompile("^(\\d{4}_[0-9_]{14})\\.log$")
- // 当前日志文件句柄
- var LogFile *os.File
- // 时间格式
- var FMT = "2006_01_02_15_04_05"
- // 日志目录
- var LogPath = "./jylog"
- func init() {
- os.Mkdir(LogPath, os.ModePerm)
- //默认保留15天内的日志,-1为永久保留
- initLog(15)
- }
- func initLog(saveDay int) {
- go logfile()
- task := cron.New()
- task.Start()
- task.AddFunc("0 0 0 * * ?", func() {
- go logfile()
- time.Sleep(50 * time.Second)
- if saveDay > 0 {
- filepath.Walk(LogPath, func(path string, info os.FileInfo, err error) error {
- str := fileReg.FindStringSubmatch(info.Name())
- if len(str) == 2 {
- t, er := time.ParseInLocation(FMT, str[1], time.Local)
- if er == nil {
- if (time.Now().Unix()-t.Unix())/86400 > int64(saveDay) {
- log.Println("delete log file:", path, os.Remove(path))
- }
- }
- }
- return nil
- })
- }
- })
- }
- // 创建并切换输出文件
- func logfile() {
- now := time.Now().Format(FMT)
- file, _ := os.Create(LogPath + "/" + now + ".log")
- log.SetOutput(file)
- xweb.RootApp().Logger.SetOutput(file)
- go func(file *os.File) {
- time.Sleep(5 * time.Second)
- if LogFile != nil {
- LogFile.Close()
- }
- LogFile = file
- }(file)
- }
|