-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlog.go
113 lines (88 loc) · 2.6 KB
/
log.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package main
import (
"bytes"
"os"
"time"
"github.com/Howard0o0/shadowsocks-mini/util"
"github.com/robfig/cron"
"github.com/sirupsen/logrus"
log "github.com/sirupsen/logrus"
)
// dir should be an absolute path
func createDir(dir string) error {
_, err := os.Stat(dir)
if err == nil {
//directory exists
return nil
}
err2 := os.MkdirAll(dir, 0666)
if err2 != nil {
return err2
}
return nil
}
type logfileHook struct {
dir string
}
func (hk *logfileHook) Fire(entry *log.Entry) error {
date := time.Now().Format("2006-01-02")
time := time.Now().Format("15:04:05")
f, err := os.OpenFile(hk.dir+"/"+date+".log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
if err == nil {
f.Write([]byte(entry.Level.String() + "\t[" + date + " " + time + "]\t" + entry.Message + "\n"))
}
defer f.Close()
return err
}
func (df *logfileHook) Levels() []log.Level {
return log.AllLevels[:5] // level >= InfoLevel
}
type warnHook struct {
logfileHook
}
func (hk *warnHook) Fire(entry *log.Entry) error {
date := time.Now().Format("2006-01-02")
time := time.Now().Format("15:04:05")
f, err := os.OpenFile(hk.dir+"/"+"WARN-"+date+".log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
if err == nil {
f.Write([]byte(entry.Level.String() + "\t[" + date + " " + time + "]\t" + entry.Message + "\n"))
}
defer f.Close()
return err
}
func (hk *warnHook) Levels() []log.Level {
return log.AllLevels[3:4] // level >= InfoLevel
}
func init() {
customFormatter := new(logrus.TextFormatter)
customFormatter.FullTimestamp = true // 显示完整时间
customFormatter.TimestampFormat = "2006-01-02 15:04:05" // 时间格式
customFormatter.DisableTimestamp = false // 禁止显示时间
customFormatter.DisableColors = false // 禁止颜色显示
logrus.SetFormatter(customFormatter)
log.SetOutput(os.Stdout)
log.SetLevel(log.DebugLevel)
}
func setClearLogFilesTimer(logPath string) {
c := cron.New()
c.AddFunc("@monthly", func() {
previousMonth := time.Now().AddDate(0, -1, 0).Format("2006-01")
fuzzyLogfiles := bytes.NewBuffer([]byte{})
fuzzyLogfiles.WriteString(logPath)
fuzzyLogfiles.WriteString("/*")
fuzzyLogfiles.WriteString(previousMonth)
fuzzyLogfiles.WriteString("*.log")
if err := util.DeleteFiles(fuzzyLogfiles.String()); err != nil {
logrus.Error("delete log files errror : ", err)
}
logrus.Info(previousMonth + " log files clear")
})
go c.Start()
}
func setLogDir(dir string) error {
hook := &logfileHook{dir: dir}
logrus.AddHook(hook)
logrus.AddHook(&warnHook{logfileHook: *hook})
setClearLogFilesTimer(dir)
return createDir(dir)
}