-
Notifications
You must be signed in to change notification settings - Fork 0
/
log.go
62 lines (52 loc) · 1.06 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
package gormTool
import (
"io"
"os"
"path/filepath"
"sync"
"time"
"github.com/kcgp007/tools/configTool"
"github.com/robfig/cron/v3"
)
type gormConfig struct {
Stdout bool
Dir string
}
var config = gormConfig{
Stdout: true,
Dir: "log",
}
type myWriter struct {
io.Writer
*os.File
*sync.RWMutex
}
func (w *myWriter) Write(p []byte) (n int, err error) {
w.RLock()
defer w.RUnlock()
return w.Writer.Write(p)
}
func (w *myWriter) change(file *os.File) {
w.Lock()
defer w.Unlock()
if config.Stdout {
w.Writer = io.MultiWriter(os.Stdout, file)
} else {
w.Writer = io.MultiWriter(file)
}
w.File, file = file, w.File
file.Close()
}
var MyWriter = &myWriter{io.MultiWriter(os.Stdout), nil, new(sync.RWMutex)}
func init() {
configTool.AddWithKey("gorm", &config)
change()
c := cron.New()
c.AddFunc("@daily", change)
c.Start()
}
func change() {
os.Mkdir(config.Dir, os.ModePerm)
file, _ := os.OpenFile(filepath.Join(config.Dir, time.Now().Format("gorm_20060102.log")), os.O_APPEND|os.O_CREATE|os.O_WRONLY, os.ModePerm)
MyWriter.change(file)
}