-
Notifications
You must be signed in to change notification settings - Fork 468
/
lager.go
executable file
·143 lines (121 loc) · 3.44 KB
/
lager.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
package lager
import (
"github.com/go-chassis/seclog"
"os"
"path/filepath"
"strings"
"github.com/go-chassis/openlog"
"github.com/go-chassis/seclog/third_party/forked/cloudfoundry/lager"
)
// constant values for log rotate parameters
const (
LogRotateDate = 1
LogRotateSize = 10
LogBackupCount = 7
)
// log level
const (
LevelDebug = "DEBUG"
LevelInfo = "INFO"
)
// output type
const (
Stdout = "stdout"
File = "file"
)
// logFilePath log file path
var logFilePath string
// Options is the struct for lager information(lager.yaml)
type Options struct {
Writers string `yaml:"logWriters"`
LoggerLevel string `yaml:"logLevel"`
LoggerFile string `yaml:"logFile"`
LogFormatText bool `yaml:"logFormatText"`
LogColorMode string `yaml:"logColorMode"`
LogRotateDisable bool `yaml:"logRotateDisable"`
LogRotateCompress bool `yaml:"logRotateCompress"`
LogRotateAge int `yaml:"logRotateAge"`
LogRotateSize int `yaml:"logRotateSize"`
LogBackupCount int `yaml:"logBackupCount"`
AccessLogFile string `yaml:"accessLogFile"`
}
// Init Build constructs a *Lager.logger with the configured parameters.
func Init(option *Options) {
var err error
logger, err := NewLog(option)
if err != nil {
panic(err)
}
openlog.SetLogger(logger)
openlog.Debug("logger init success")
}
// NewLog returns a logger
func NewLog(option *Options) (lager.Logger, error) {
checkPassLagerDefinition(option)
localPath := ""
if !filepath.IsAbs(option.LoggerFile) {
localPath = os.Getenv("CHASSIS_HOME")
}
err := createLogFile(localPath, option.LoggerFile)
if err != nil {
return nil, err
}
logFilePath = filepath.Join(localPath, option.LoggerFile)
writers := strings.Split(strings.TrimSpace(option.Writers), ",")
option.LoggerFile = logFilePath
seclog.Init(seclog.Config{
LoggerLevel: option.LoggerLevel,
LogFormatText: option.LogFormatText,
LogColorMode: option.LogColorMode,
Writers: writers,
LoggerFile: logFilePath,
RotateDisable: option.LogRotateDisable,
MaxSize: option.LogRotateSize,
MaxAge: option.LogRotateAge,
MaxBackups: option.LogBackupCount,
Compress: option.LogRotateCompress,
})
logger := seclog.NewLogger("ut")
return logger, nil
}
// checkPassLagerDefinition check pass lager definition
func checkPassLagerDefinition(option *Options) {
if option.LoggerLevel == "" {
option.LoggerLevel = "DEBUG"
}
if option.LoggerFile == "" {
option.LoggerFile = "log/chassis.log"
}
if option.LogRotateAge < 0 || option.LogRotateAge > 10 {
option.LogRotateAge = LogRotateDate
}
if option.LogRotateSize <= 0 || option.LogRotateSize > 50 {
option.LogRotateSize = LogRotateSize
}
if option.LogBackupCount < 0 || option.LogBackupCount > 100 {
option.LogBackupCount = LogBackupCount
}
if option.Writers == "" {
option.Writers = "file,stdout"
}
if option.LogColorMode == "" {
option.LogColorMode = lager.ColorModeAuto
}
}
// createLogFile create log file
func createLogFile(localPath, out string) error {
_, err := os.Stat(strings.Replace(filepath.Dir(filepath.Join(localPath, out)), "\\", "/", -1))
if err != nil && os.IsNotExist(err) {
err = os.MkdirAll(strings.Replace(filepath.Dir(filepath.Join(localPath, out)), "\\", "/", -1), os.ModePerm)
if err != nil {
return err
}
} else if err != nil {
return err
}
f, err := os.OpenFile(strings.Replace(filepath.Join(localPath, out), "\\", "/", -1), os.O_CREATE, 0600)
if err != nil {
return err
}
return f.Close()
}