route/vendor/github.com/mmatczuk/go-http-tunnel/log/filterlogger.go

49 lines
899 B
Go

// Copyright (C) 2017 MichaƂ Matczuk
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package log
type filterLogger struct {
level int
logger Logger
}
// NewFilterLogger returns a Logger that accepts only log messages with
// "level" value <= level. Currently there are four levels 0 - error, 1 - info,
// 2 - debug, 3 - trace.
func NewFilterLogger(logger Logger, level int) Logger {
return filterLogger{
level: level,
logger: logger,
}
}
func (p filterLogger) Log(keyvals ...interface{}) error {
for i := 0; i < len(keyvals); i += 2 {
k := keyvals[i]
s, ok := k.(string)
if !ok {
continue
}
if s != "level" {
continue
}
if i+1 >= len(keyvals) {
break
}
v := keyvals[i+1]
level, ok := v.(int)
if !ok {
break
}
if level > p.level {
return nil
}
}
return p.logger.Log(keyvals...)
}