-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlogger.go
115 lines (101 loc) · 1.86 KB
/
logger.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
114
115
package log
import (
"fmt"
"github.com/chi-chu/log/define"
"github.com/chi-chu/log/entry"
"github.com/robfig/cron/v3"
)
type IPrint interface {
Print(*entry.Entry)
Rotate(bool) error
Exit()
}
type Option func(*logger)
type logger struct {
Out IPrint
Hook entry.Hook
TextFormat FormatType
ReportCaller bool
Level define.Level
RotateFlag bool
RotateType string
cron *cron.Cron
errFunc func(error)
}
var log *logger
func init() {
log = &logger{
Out: newStdout(),
Hook: nil,
TextFormat: FORMAT_JSON,
ReportCaller: true,
Level: define.DEBUG,
RotateFlag: false,
RotateType: ROTATE_DAY,
errFunc: func(err error){fmt.Println(err)},
}
}
func Opt(opt ...Option) {
for _, f := range opt {
f(log)
}
}
func SetWriterAndRotate(print IPrint, on bool, rotateType string) Option {
return func(l *logger) {
l.Out = print
l.RotateFlag = on
if rotateType == "" {
rotateType = ROTATE_DAY
}
l.RotateType = rotateType
err := log.Out.Rotate(on)
if err != nil {
fmt.Println(err)
}
if on {
log.cron = cron.New()
_, err := log.cron.AddFunc(rotateType, func() {
err := log.Out.Rotate(on)
if err != nil {
fmt.Println(err)
}
})
if err != nil {
fmt.Println(err)
return
}
l.cron.Start()
}
}
}
func SetLevel(level define.Level) Option {
return func(l *logger) {
l.Level = level
}
}
func SetFormat(formatType FormatType) Option {
return func(l *logger) {
l.TextFormat = formatType
}
}
func SetHook(hook entry.Hook) Option {
return func(l *logger) {
l.Hook = hook
}
}
func SetReportCaller(on bool) Option {
return func(l *logger) {
l.ReportCaller = on
}
}
//func SetErrorFunc(errFunc func(error)) Option {
// return func(l *logger) {
// l.errFunc = errFunc
// }
//}
func Exit() {
if log.cron != nil {
log.cron.Stop()
}
log.Out.Exit()
}