Skip to content

Commit a02cf5b

Browse files
committed
feat(logging): added loging filters
1 parent 3dc7706 commit a02cf5b

File tree

6 files changed

+73
-17
lines changed

6 files changed

+73
-17
lines changed

conf/defaults.ini

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -248,12 +248,9 @@ templates_pattern = emails/*.html
248248
#################################### Logging ##########################
249249
[log]
250250
# Either "console", "file", "syslog". Default is console and file
251-
# Use comma to separate multiple modes, e.g. "console, file"
251+
# Use space to separate multiple modes, e.g. "console file"
252252
mode = console, file
253253

254-
# Buffer length of channel, keep it as it is if you don't know what it is.
255-
buffer_len = 10000
256-
257254
# Either "Trace", "Debug", "Info", "Warn", "Error", "Critical", default is "Info"
258255
level = Info
259256

conf/sample.ini

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,6 @@ check_for_updates = true
233233
# Use comma to separate multiple modes, e.g. "console, file"
234234
;mode = console, file
235235

236-
# Buffer length of channel, keep it as it is if you don't know what it is.
237-
;buffer_len = 10000
238-
239236
# Either "Trace", "Debug", "Info", "Warn", "Error", "Critical", default is "Info"
240237
;level = Info
241238

pkg/log/log.go

Lines changed: 62 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,21 +90,40 @@ var logLevels = map[string]log15.Lvl{
9090
"Critical": log15.LvlCrit,
9191
}
9292

93-
func getLogLevel(key string, defaultName string, cfg *ini.File) (string, log15.Lvl) {
93+
func getLogLevelFromConfig(key string, defaultName string, cfg *ini.File) (string, log15.Lvl) {
9494
levelName := cfg.Section(key).Key("level").In(defaultName, []string{"Trace", "Debug", "Info", "Warn", "Error", "Critical"})
95+
level := getLogLevelFromString(levelName)
96+
return levelName, level
97+
}
9598

99+
func getLogLevelFromString(levelName string) log15.Lvl {
96100
level, ok := logLevels[levelName]
101+
97102
if !ok {
98103
Root.Error("Unknown log level", "level", levelName)
104+
return log15.LvlError
99105
}
100106

101-
return levelName, level
107+
return level
108+
}
109+
110+
func getFilters(filterStrArray []string) map[string]log15.Lvl {
111+
filterMap := make(map[string]log15.Lvl)
112+
113+
for _, filterStr := range filterStrArray {
114+
parts := strings.Split(filterStr, ":")
115+
filterMap[parts[0]] = getLogLevelFromString(parts[1])
116+
}
117+
118+
return filterMap
102119
}
103120

104121
func ReadLoggingConfig(modes []string, logsPath string, cfg *ini.File) {
105122
Close()
106123

107-
defaultLevelName, _ := getLogLevel("log", "Info", cfg)
124+
defaultLevelName, _ := getLogLevelFromConfig("log", "Info", cfg)
125+
defaultFilters := getFilters(cfg.Section("log").Key("filters").Strings(" "))
126+
108127
handlers := make([]log15.Handler, 0)
109128

110129
for _, mode := range modes {
@@ -115,12 +134,15 @@ func ReadLoggingConfig(modes []string, logsPath string, cfg *ini.File) {
115134
}
116135

117136
// Log level.
118-
_, level := getLogLevel("log."+mode, defaultLevelName, cfg)
137+
_, level := getLogLevelFromConfig("log."+mode, defaultLevelName, cfg)
138+
modeFilters := getFilters(sec.Key("filters").Strings(" "))
139+
140+
var handler log15.Handler
119141

120142
// Generate log configuration.
121143
switch mode {
122144
case "console":
123-
handlers = append(handlers, log15.LvlFilterHandler(level, log15.StdoutHandler))
145+
handler = log15.StdoutHandler
124146
case "file":
125147
fileName := sec.Key("file_name").MustString(filepath.Join(logsPath, "grafana.log"))
126148
os.MkdirAll(filepath.Dir(fileName), os.ModePerm)
@@ -134,7 +156,7 @@ func ReadLoggingConfig(modes []string, logsPath string, cfg *ini.File) {
134156
fileHandler.Init()
135157

136158
loggersToClose = append(loggersToClose, fileHandler)
137-
handlers = append(handlers, log15.LvlFilterHandler(level, fileHandler))
159+
handler = fileHandler
138160

139161
// case "conn":
140162
// LogConfigs[i] = util.DynMap{
@@ -168,7 +190,41 @@ func ReadLoggingConfig(modes []string, logsPath string, cfg *ini.File) {
168190
// "tag": sec.Key("tag").MustString(""),
169191
// }
170192
}
193+
194+
for key, value := range defaultFilters {
195+
if _, exist := modeFilters[key]; !exist {
196+
modeFilters[key] = value
197+
}
198+
}
199+
200+
for key, value := range modeFilters {
201+
fmt.Printf("key: %v, value: %v \n", key, value)
202+
}
203+
204+
handler = LogFilterHandler(level, modeFilters, handler)
205+
handlers = append(handlers, handler)
171206
}
172207

173208
Root.SetHandler(log15.MultiHandler(handlers...))
174209
}
210+
211+
func LogFilterHandler(maxLevel log15.Lvl, filters map[string]log15.Lvl, h log15.Handler) log15.Handler {
212+
return log15.FilterHandler(func(r *log15.Record) (pass bool) {
213+
214+
if len(filters) > 0 {
215+
for i := 0; i < len(r.Ctx); i += 2 {
216+
key := r.Ctx[i].(string)
217+
if key == "logger" {
218+
loggerName, strOk := r.Ctx[i+1].(string)
219+
if strOk {
220+
if filterLevel, ok := filters[loggerName]; ok {
221+
return r.Lvl <= filterLevel
222+
}
223+
}
224+
}
225+
}
226+
}
227+
228+
return r.Lvl <= maxLevel
229+
}, h)
230+
}

pkg/middleware/logger.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"time"
2121

2222
"github.com/grafana/grafana/pkg/metrics"
23+
"github.com/grafana/grafana/pkg/setting"
2324
"gopkg.in/macaron.v1"
2425
)
2526

@@ -40,9 +41,9 @@ func Logger() macaron.Handler {
4041

4142
status := rw.Status()
4243
if status == 200 || status == 304 {
43-
// if !setting.RouterLogging {
44-
// return
45-
// }
44+
if !setting.RouterLogging {
45+
return
46+
}
4647
}
4748

4849
if ctx, ok := c.Data["ctx"]; ok {

pkg/services/sqlstore/migrator/migrator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ type MigrationLog struct {
2929
func NewMigrator(engine *xorm.Engine) *Migrator {
3030
mg := &Migrator{}
3131
mg.x = engine
32-
mg.Logger = log.New("Migrator")
32+
mg.Logger = log.New("migrator")
3333
mg.migrations = make([]Migration, 0)
3434
mg.dialect = NewDialect(mg.x.DriverName())
3535
return mg

pkg/setting/setting.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,12 @@ func readSessionConfig() {
546546
}
547547

548548
func initLogging() {
549+
// split on comma
549550
LogModes = strings.Split(Cfg.Section("log").Key("mode").MustString("console"), ",")
551+
// also try space
552+
if len(LogModes) == 1 {
553+
LogModes = strings.Split(Cfg.Section("log").Key("mode").MustString("console"), " ")
554+
}
550555
LogsPath = makeAbsolute(Cfg.Section("paths").Key("logs").String(), HomePath)
551556
log.ReadLoggingConfig(LogModes, LogsPath, Cfg)
552557
}

0 commit comments

Comments
 (0)