-
Notifications
You must be signed in to change notification settings - Fork 0
/
log.go
181 lines (162 loc) · 3.37 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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
package main
import (
"github.com/simplemoon/golog/conf"
"github.com/simplemoon/golog/utils"
"github.com/fsnotify/fsnotify"
//"github.com/heirko/go-contrib/logrusHelper"
"github.com/sirupsen/logrus"
"github.com/spf13/viper"
)
// 具体的定义
type logger struct {
*logrus.Entry
}
var (
gLogger *logger
viperCfg = viper.New()
cfg conf.Config // 配置文件
)
func initViper() {
filename := utils.GetFileName(cfg.Path)
viperCfg.SetConfigName(filename)
// 如果 dir 不为空
if cfg.Dir != "" {
viperCfg.AddConfigPath(cfg.Dir)
} else {
viperCfg.AddConfigPath(".")
}
if cfg.ReloadWhenChange {
viperCfg.WatchConfig()
viperCfg.OnConfigChange(onConfigChange)
}
// 检查是否需要远程配置
if cfg.EndPoints == "" {
return
}
for _, p := range cfg.RemoteProviders {
viperCfg.AddRemoteProvider(p, cfg.EndPoints, filename)
}
if cfg.ReloadWhenChange {
viperCfg.WatchRemoteConfig()
}
}
func loadConfig() error {
err := viperCfg.ReadInConfig()
if err == nil {
return nil
}
err = viperCfg.ReadRemoteConfig()
if err == nil {
return nil
}
return err
}
// 初始化logger配置
func initLogger() {
// 重新设置logger
// 从配置之中解析结构体
//var c = logrusHelper.UnmarshalConfiguration(viperCfg)
//err := logrusHelper.SetConfig(logrus.StandardLogger(), c)
//if err != nil {
// log.Printf("load from viper err %v", err)
//}
// TODO: 设置对应的配置路径
}
// 配置改变
func onConfigChange(in fsnotify.Event) {
// log的配置改变时调用
switch in.Op {
case fsnotify.Write, fsnotify.Create:
default:
return
}
// 判断文件的名称
filename := utils.GetFileName(cfg.Path)
if filename != in.Name {
return
}
// 重新设置
initLogger()
}
// 设置配置路径
func SetConfig(path, dir, endpoint string, watch bool, provider ...string) {
// 其他的配置
if path == "" {
// 当前目录下的config.json文件的配置
cfg = conf.Config{
Path: "config.json",
Dir: ".",
ReloadWhenChange: true,
}
return
}
// 配置文件的名字
cfg = conf.Config{
Path: path,
Dir: dir,
EndPoints: endpoint,
RemoteProviders: provider,
ReloadWhenChange: watch,
}
}
// 初始化
func Init() {
// 初始化viper
initViper()
// 加载配置
err := loadConfig()
if err != nil {
panic(err)
}
// 设置logger的配置了,从文件之中读取配置文件
initLogger()
}
// 输出debug的日志
func Debug(format string, args ...interface{}) {
if gLogger == nil {
return
}
gLogger.Debugf(format, args...)
}
func Warn(format string, args ...interface{}) {
if gLogger == nil {
return
}
gLogger.Warnf(format, args...)
}
func Info(format string, args ...interface{}) {
if gLogger == nil {
return
}
gLogger.Infof(format, args...)
}
func Error(format string, args ...interface{}) {
if gLogger == nil {
return
}
gLogger.Errorf(format, args...)
}
func Fatal(format string, args ...interface{}) {
if gLogger == nil {
return
}
gLogger.Fatalf(format, args...)
}
func WithField(key string, value interface{}) *logrus.Entry {
if gLogger == nil {
return nil
}
return gLogger.WithField(key, value)
}
func WithFields(fields logrus.Fields) *logrus.Entry {
if gLogger == nil {
return nil
}
return gLogger.WithFields(fields)
}
func WithError(err error) *logrus.Entry {
if gLogger == nil {
return nil
}
return gLogger.WithError(err)
}