1
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

63 lines
1.5 KiB

package logging
import (
"strings"
"github.com/go-kit/log/level"
glog "github.com/grafana/grafana/pkg/infra/log"
)
// GoKitWrapper wraps around the grafana-specific logger to make a compatible logger for go-kit.
type GoKitWrapper struct {
logger glog.Logger
}
// NewWrapper creates a new go-kit wrapper for a grafana-specific logger
func NewWrapper(l glog.Logger) *GoKitWrapper {
return &GoKitWrapper{logger: l}
}
// Write implements io.Writer
func (w *GoKitWrapper) Write(p []byte) (n int, err error) {
withoutNewline := strings.TrimSuffix(string(p), "\n")
w.logger.Info(withoutNewline)
return len(p), nil
}
// Log implements interface go-kit/log/Logger. It tries to extract level and message from the context and writes to underlying message.
// To successfully extract the log level, the first pair of elements should be 'lvl' and log level. Otherwise, it falls back to info.
// The following pair should be 'msg' and message. Otherwise, it uses the empty string as message.
func (w *GoKitWrapper) Log(keyvals ...interface{}) error {
if len(keyvals) == 0 {
return nil
}
f := w.logger.Info
startwith := 0
if keyvals[0] == level.Key() {
startwith = 2
switch keyvals[1] {
case level.DebugValue():
f = w.logger.Debug
case level.InfoValue():
f = w.logger.Info
case level.WarnValue():
f = w.logger.Warn
case level.ErrorValue():
f = w.logger.Error
}
}
msg := ""
if keyvals[startwith] == "msg" {
str, ok := keyvals[startwith+1].(string)
if ok {
msg = str
startwith += 2
}
}
f(msg, keyvals[startwith:]...)
return nil
}