-
Notifications
You must be signed in to change notification settings - Fork 13
/
logs.go
95 lines (83 loc) · 2.35 KB
/
logs.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
package config
import (
"fmt"
"github.com/fzxiao233/Vtb_Record/utils"
"github.com/orandin/lumberjackrus"
"github.com/sirupsen/logrus"
"io"
"io/ioutil"
"os"
"path"
"runtime"
)
// WriterHook is a hook that writes logs of specified LogLevels to specified Writer
type WriterHook struct {
Out io.Writer
Formatter logrus.Formatter
LogLevel logrus.Level
}
// Fire will be called when some logging function is called with current hook
// It will format logrus entry to string and write it to appropriate writer
func (hook *WriterHook) Fire(entry *logrus.Entry) error {
if entry.Level > hook.LogLevel {
return nil
}
serialized, err := hook.Formatter.Format(entry)
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to obtain reader, %v\n", err)
return err
}
if _, err = hook.Out.Write(serialized); err != nil {
fmt.Fprintf(os.Stderr, "Failed to write to logrus, %v\n", err)
}
return nil
}
// Levels define on which logrus levels this hook would trigger
func (hook *WriterHook) Levels() []logrus.Level {
//return logrus.AllLevels[:hook.LogLevel+1]
return logrus.AllLevels[:logrus.DebugLevel+1]
}
var ConsoleHook *WriterHook
var FileHook *lumberjackrus.Hook
// Can't be func init as we need the parsed config
func InitLog() {
var err error
logrus.Printf("Init logging!")
logrus.SetLevel(logrus.DebugLevel)
logrus.SetReportCaller(true)
// Log as JSON instead of the default ASCII formatter.
formatter := &logrus.TextFormatter{
ForceColors: true,
CallerPrettyfier: func(f *runtime.Frame) (string, string) {
filename := path.Base(f.File)
_, _, shortfname := utils.RPartition(f.Function, ".")
return fmt.Sprintf("%s()", shortfname), fmt.Sprintf("%s:%d", filename, f.Line)
},
}
logrus.SetFormatter(formatter)
ConsoleHook = &WriterHook{ // Send logs with level higher than warning to stderr
Out: logrus.StandardLogger().Out,
Formatter: formatter,
LogLevel: logrus.InfoLevel,
}
logrus.AddHook(ConsoleHook)
logrus.StandardLogger().Out = ioutil.Discard
FileHook, err = lumberjackrus.NewHook(
&lumberjackrus.LogFile{
Filename: Config.LogFile,
MaxSize: Config.LogFileSize,
MaxBackups: 1,
MaxAge: 1,
Compress: false,
LocalTime: false,
},
logrus.DebugLevel,
&logrus.JSONFormatter{},
nil,
)
if err != nil {
panic(fmt.Errorf("NewHook Error: %s", err))
}
logrus.AddHook(FileHook)
UpdateLogLevel()
}