-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathrotatefile.go
99 lines (81 loc) · 3.32 KB
/
rotatefile.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
package handler
import (
"github.com/gookit/goutil/basefn"
"github.com/gookit/slog/rotatefile"
)
// NewRotateFileHandler instance. It supports splitting log files by time and size
func NewRotateFileHandler(logfile string, rt rotatefile.RotateTime, fns ...ConfigFn) (*SyncCloseHandler, error) {
cfg := NewConfig(fns...).With(WithLogfile(logfile), WithRotateTime(rt))
writer, err := cfg.RotateWriter()
if err != nil {
return nil, err
}
h := NewSyncCloseHandler(writer, cfg.Levels)
return h, nil
}
// MustRotateFile handler instance, will panic on create error
func MustRotateFile(logfile string, rt rotatefile.RotateTime, fns ...ConfigFn) *SyncCloseHandler {
return basefn.Must(NewRotateFileHandler(logfile, rt, fns...))
}
// NewRotateFile instance. alias of NewRotateFileHandler()
func NewRotateFile(logfile string, rt rotatefile.RotateTime, fns ...ConfigFn) (*SyncCloseHandler, error) {
return NewRotateFileHandler(logfile, rt, fns...)
}
//
// ---------------------------------------------------------------------------
// rotate file by size
// ---------------------------------------------------------------------------
//
// MustSizeRotateFile instance
func MustSizeRotateFile(logfile string, maxSize int, fns ...ConfigFn) *SyncCloseHandler {
return basefn.Must(NewSizeRotateFileHandler(logfile, maxSize, fns...))
}
// NewSizeRotateFile instance
func NewSizeRotateFile(logfile string, maxSize int, fns ...ConfigFn) (*SyncCloseHandler, error) {
return NewSizeRotateFileHandler(logfile, maxSize, fns...)
}
// NewSizeRotateFileHandler instance, default close rotate by time.
func NewSizeRotateFileHandler(logfile string, maxSize int, fns ...ConfigFn) (*SyncCloseHandler, error) {
// close rotate by time.
fns = append(fns, WithMaxSize(uint64(maxSize)))
return NewRotateFileHandler(logfile, 0, fns...)
}
//
// ---------------------------------------------------------------------------
// rotate log file by time
// ---------------------------------------------------------------------------
//
// RotateTime rotate log file by time.
//
// EveryDay:
// - "error.log.20201223"
//
// EveryHour, Every30Minutes, EveryMinute:
// - "error.log.20201223_1500"
// - "error.log.20201223_1530"
// - "error.log.20201223_1523"
//
// Deprecated: please use rotatefile.RotateTime
type RotateTime = rotatefile.RotateTime
// Deprecated: Please use define constants on pkg rotatefile. e.g. rotatefile.EveryDay
const (
EveryDay = rotatefile.EveryDay
EveryHour = rotatefile.EveryDay
Every30Minutes = rotatefile.Every30Min
Every15Minutes = rotatefile.Every15Min
EveryMinute = rotatefile.EveryMinute
EverySecond = rotatefile.EverySecond // only use for tests
)
// MustTimeRotateFile instance
func MustTimeRotateFile(logfile string, rt rotatefile.RotateTime, fns ...ConfigFn) *SyncCloseHandler {
return basefn.Must(NewTimeRotateFileHandler(logfile, rt, fns...))
}
// NewTimeRotateFile instance
func NewTimeRotateFile(logfile string, rt rotatefile.RotateTime, fns ...ConfigFn) (*SyncCloseHandler, error) {
return NewTimeRotateFileHandler(logfile, rt, fns...)
}
// NewTimeRotateFileHandler instance, default close rotate by size
func NewTimeRotateFileHandler(logfile string, rt rotatefile.RotateTime, fns ...ConfigFn) (*SyncCloseHandler, error) {
// default close rotate by size: WithMaxSize(0)
return NewRotateFileHandler(logfile, rt, append(fns, WithMaxSize(0))...)
}