-
Notifications
You must be signed in to change notification settings - Fork 43
/
init.go
117 lines (100 loc) · 2.66 KB
/
init.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
116
117
package entity
import (
"os"
"path/filepath"
log "github.com/cihub/seelog"
"github.com/fsnotify/fsnotify"
"github.com/spf13/viper"
)
func init() {
initDefs()
initLogger()
}
var elogger log.LoggerInterface
func initLogger() {
viper.SetConfigFile("../res/config/server.json")
if err := viper.ReadInConfig(); err != nil {
panic("加载配置文件失败")
}
logDir := viper.GetString("Config.LogDir")
logLevel := viper.GetString("Config.LogLevel")
load(logDir, logLevel)
go func() {
watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Error(err)
return
}
defer watcher.Close()
if err = watcher.Add("../res/config/server.json"); err != nil {
log.Error(err)
return
}
for {
select {
case ev := <-watcher.Events:
if ev.Op == fsnotify.Write {
if err := viper.ReadInConfig(); err != nil {
log.Error(err)
continue
}
dir := viper.GetString("Config.LogDir")
level := viper.GetString("Config.LogLevel")
load(dir, level)
}
case err := <-watcher.Errors:
log.Error(err)
}
}
}()
}
func load(logdir string, loglevel string) {
log.Info("Logdir:", logdir, " Loglevel:", loglevel)
switch loglevel {
case "prod":
loglevel = "info"
case "debug", "info", "warn", "error":
default:
log.Error("LogLevel unsupport! [debug/prod/info/warn/error]")
return
}
// <filter levels="debug">
// <console />
// </filter>
srvName := logdir + filepath.Base(os.Args[0])
str1 := `<seelog minlevel="`
str2 := `" maxlevel="error">
<outputs formatid="main">
<filter levels="debug,info,warn,error">
<console />
<buffered size="10000" flushperiod="1000">
<rollingfile type="date" filename="`
str3 := `.infolog" datepattern="2006.01.02.15" fullname="true" maxrolls="30"/>
</buffered>
<filter levels="warn,error">
<buffered size="10000" flushperiod="1000">
<rollingfile type="date" filename="`
str4 := `.warnlog" datepattern="2006.01.02.15" fullname="true" maxrolls="30"/>
</buffered>
<filter levels="error">
<buffered size="10000" flushperiod="1000">
<rollingfile type="date" filename="`
str5 := `.errorlog" datepattern="2006.01.02.15" fullname="true" maxrolls="30"/>
</buffered>
</filter>
</filter>
</filter>
</outputs>
<formats>
<format id="main" format="%Date(2006-01-02 15:04:05.999) [%LEV] [%File:%Line] %Msg%n"/>
</formats>
</seelog>`
path := str1 + loglevel + str2 + srvName + str3 + srvName + str4 + srvName + str5
defer log.Flush()
logger, err := log.LoggerFromConfigAsString(path)
if err != nil {
panic(err)
}
logger.SetAdditionalStackDepth(1)
elogger = logger
}