-
Notifications
You must be signed in to change notification settings - Fork 0
/
log_center.go
75 lines (68 loc) · 1.67 KB
/
log_center.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
package part
import (
"fmt"
"io"
"os"
"time"
rotatelogs "github.com/lestrrat/go-file-rotatelogs"
"github.com/sirupsen/logrus"
"github.com/spf13/viper"
)
// "disable" < "fatal" < "error" < "warn" < "info" < "debug"
func parseLogLevel(level string) (result logrus.Level) {
switch level {
case "fatal":
result = logrus.FatalLevel
case "error":
result = logrus.ErrorLevel
case "warn":
result = logrus.WarnLevel
case "info":
result = logrus.InfoLevel
case "debug":
result = logrus.DebugLevel
}
return
}
type ILogCenter interface {
Log() *logrus.Logger
}
type LogCenter struct {
logger *logrus.Logger
}
func NewLogCenter() ILogCenter {
writers := []io.Writer{}
logLevel := viper.GetString("log.level")
serverName := os.Getenv("GODF_SERVER_NAME")
if serverName == "" {
serverName = "Unknow"
}
logFilePath := "./logs"
if _, err := os.Stat(logFilePath); err != nil {
if os.IsNotExist(err) {
os.MkdirAll(logFilePath, 0777)
}
}
instance := &LogCenter{
logger: logrus.New(),
}
instance.logger.Formatter = &logrus.JSONFormatter{
TimestampFormat: "2006-01-02 15:04:05",
}
instance.logger.Level = parseLogLevel(logLevel)
rotateWriter, _ := rotatelogs.New(
fmt.Sprintf("%s/%%Y%%m%%d.log", logFilePath),
rotatelogs.WithRotationCount(0),
rotatelogs.WithRotationTime(time.Hour*24), //24小时分割文件,没有找到按天零点切割的配置,如有需要可自行实现
)
writers = append(writers, rotateWriter)
if ENV == ENUM_ENV_DEV {
writers = append(writers, os.Stdout)
}
fileAndStdoutWriter := io.MultiWriter(writers...)
instance.logger.Out = fileAndStdoutWriter
return instance
}
func (m *LogCenter) Log() *logrus.Logger {
return m.logger
}