@@ -13,6 +13,7 @@ import (
13
13
"gopkg.in/ini.v1"
14
14
15
15
"github.com/inconshreveable/log15"
16
+ "github.com/inconshreveable/log15/term"
16
17
)
17
18
18
19
var Root log15.Logger
@@ -82,16 +83,17 @@ func Close() {
82
83
}
83
84
84
85
var logLevels = map [string ]log15.Lvl {
85
- "Trace " : log15 .LvlDebug ,
86
- "Debug " : log15 .LvlDebug ,
87
- "Info " : log15 .LvlInfo ,
88
- "Warn " : log15 .LvlWarn ,
89
- "Error " : log15 .LvlError ,
90
- "Critical " : log15 .LvlCrit ,
86
+ "trace " : log15 .LvlDebug ,
87
+ "debug " : log15 .LvlDebug ,
88
+ "info " : log15 .LvlInfo ,
89
+ "warn " : log15 .LvlWarn ,
90
+ "error " : log15 .LvlError ,
91
+ "critical " : log15 .LvlCrit ,
91
92
}
92
93
93
94
func getLogLevelFromConfig (key string , defaultName string , cfg * ini.File ) (string , log15.Lvl ) {
94
- levelName := cfg .Section (key ).Key ("level" ).In (defaultName , []string {"Trace" , "Debug" , "Info" , "Warn" , "Error" , "Critical" })
95
+ levelName := cfg .Section (key ).Key ("level" ).MustString ("info" )
96
+ levelName = strings .ToLower (levelName )
95
97
level := getLogLevelFromString (levelName )
96
98
return levelName , level
97
99
}
@@ -118,10 +120,26 @@ func getFilters(filterStrArray []string) map[string]log15.Lvl {
118
120
return filterMap
119
121
}
120
122
123
+ func getLogFormat (format string ) log15.Format {
124
+ switch format {
125
+ case "console" :
126
+ if term .IsTty (os .Stdout .Fd ()) {
127
+ return log15 .TerminalFormat ()
128
+ }
129
+ return log15 .LogfmtFormat ()
130
+ case "text" :
131
+ return log15 .LogfmtFormat ()
132
+ case "json" :
133
+ return log15 .JsonFormat ()
134
+ default :
135
+ return log15 .LogfmtFormat ()
136
+ }
137
+ }
138
+
121
139
func ReadLoggingConfig (modes []string , logsPath string , cfg * ini.File ) {
122
140
Close ()
123
141
124
- defaultLevelName , _ := getLogLevelFromConfig ("log" , "Info " , cfg )
142
+ defaultLevelName , _ := getLogLevelFromConfig ("log" , "info " , cfg )
125
143
defaultFilters := getFilters (cfg .Section ("log" ).Key ("filters" ).Strings (" " ))
126
144
127
145
handlers := make ([]log15.Handler , 0 )
@@ -136,18 +154,20 @@ func ReadLoggingConfig(modes []string, logsPath string, cfg *ini.File) {
136
154
// Log level.
137
155
_ , level := getLogLevelFromConfig ("log." + mode , defaultLevelName , cfg )
138
156
modeFilters := getFilters (sec .Key ("filters" ).Strings (" " ))
157
+ format := getLogFormat (sec .Key ("format" ).MustString ("" ))
139
158
140
159
var handler log15.Handler
141
160
142
161
// Generate log configuration.
143
162
switch mode {
144
163
case "console" :
145
- handler = log15 .StdoutHandler
164
+ handler = log15 .StreamHandler ( os . Stdout , format )
146
165
case "file" :
147
166
fileName := sec .Key ("file_name" ).MustString (filepath .Join (logsPath , "grafana.log" ))
148
167
os .MkdirAll (filepath .Dir (fileName ), os .ModePerm )
149
168
fileHandler := NewFileWriter ()
150
169
fileHandler .Filename = fileName
170
+ fileHandler .Format = format
151
171
fileHandler .Rotate = sec .Key ("log_rotate" ).MustBool (true )
152
172
fileHandler .Maxlines = sec .Key ("max_lines" ).MustInt (1000000 )
153
173
fileHandler .Maxsize = 1 << uint (sec .Key ("max_size_shift" ).MustInt (28 ))
@@ -159,6 +179,7 @@ func ReadLoggingConfig(modes []string, logsPath string, cfg *ini.File) {
159
179
handler = fileHandler
160
180
case "syslog" :
161
181
sysLogHandler := NewSyslog ()
182
+ sysLogHandler .Format = format
162
183
sysLogHandler .Network = sec .Key ("network" ).MustString ("" )
163
184
sysLogHandler .Address = sec .Key ("address" ).MustString ("" )
164
185
sysLogHandler .Facility = sec .Key ("facility" ).MustString ("local7" )
0 commit comments