mirror of https://github.com/grafana/grafana
Alerting: Remove bridge between log15 and go-kit logger (#43769)
* remove bridge between log15 and go-kit logger. * fix testspull/43785/head
parent
faca526c16
commit
ea478dec22
@ -1,63 +0,0 @@ |
|||||||
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 |
|
||||||
} |
|
||||||
@ -1,103 +0,0 @@ |
|||||||
package logging |
|
||||||
|
|
||||||
import ( |
|
||||||
"bytes" |
|
||||||
"fmt" |
|
||||||
"io" |
|
||||||
"testing" |
|
||||||
|
|
||||||
"github.com/go-kit/log" |
|
||||||
glog "github.com/grafana/grafana/pkg/infra/log" |
|
||||||
"github.com/grafana/grafana/pkg/infra/log/level" |
|
||||||
"github.com/stretchr/testify/require" |
|
||||||
) |
|
||||||
|
|
||||||
func Test_GoKitWrapper(t *testing.T) { |
|
||||||
getLogger := func(writer io.Writer) log.Logger { |
|
||||||
gLogger := glog.New() |
|
||||||
gLogger.AddLogger(log.NewLogfmtLogger(writer), "info", map[string]level.Option{}) |
|
||||||
return NewWrapper(gLogger) |
|
||||||
} |
|
||||||
|
|
||||||
tests := []struct { |
|
||||||
level level.Value |
|
||||||
expectedLevel string |
|
||||||
}{ |
|
||||||
{ |
|
||||||
level.DebugValue(), |
|
||||||
"dbug", |
|
||||||
}, |
|
||||||
{ |
|
||||||
level.InfoValue(), |
|
||||||
"info", |
|
||||||
}, |
|
||||||
{ |
|
||||||
level.WarnValue(), |
|
||||||
"warn", |
|
||||||
}, |
|
||||||
{ |
|
||||||
level.ErrorValue(), |
|
||||||
"eror", |
|
||||||
}, |
|
||||||
} |
|
||||||
for _, test := range tests { |
|
||||||
t.Run(fmt.Sprintf("when level %s", test.level.String()), func(t *testing.T) { |
|
||||||
t.Run(fmt.Sprintf("rendered message should contain the level %s", test.expectedLevel), func(t *testing.T) { |
|
||||||
var data bytes.Buffer |
|
||||||
gokitLogger := getLogger(&data) |
|
||||||
_ = log.WithPrefix(gokitLogger, level.Key(), test.level).Log("msg", "test", "some", "more", "context", "data") |
|
||||||
|
|
||||||
str := data.String() |
|
||||||
require.Contains(t, str, fmt.Sprintf("lvl=%s msg=test some=more context=data", test.expectedLevel)) |
|
||||||
}) |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
t.Run("use info when level does not exist", func(t *testing.T) { |
|
||||||
var data bytes.Buffer |
|
||||||
gokitLogger := getLogger(&data) |
|
||||||
_ = gokitLogger.Log("msg", "test", "some", "more", "context", "data") |
|
||||||
str := data.String() |
|
||||||
require.Contains(t, str, "lvl=info msg=test some=more context=data") |
|
||||||
}) |
|
||||||
t.Run("use empty msg when context misses msg", func(t *testing.T) { |
|
||||||
var data bytes.Buffer |
|
||||||
gokitLogger := getLogger(&data) |
|
||||||
_ = gokitLogger.Log("message", "test", "some", "more", "context", "data") |
|
||||||
str := data.String() |
|
||||||
require.Contains(t, str, "lvl=info msg= message=test some=more context=data") |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
func Benchmark_Baseline(t *testing.B) { |
|
||||||
gLogger := glog.New() |
|
||||||
var buff bytes.Buffer |
|
||||||
gLogger.AddLogger(log.NewLogfmtLogger(&buff), "info", map[string]level.Option{}) |
|
||||||
|
|
||||||
for i := 0; i < t.N; i++ { |
|
||||||
gLogger.Info("test", "some", "more", "context", "data") |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
func Benchmark_WrapperLogger(t *testing.B) { |
|
||||||
gLogger := glog.New() |
|
||||||
var buff bytes.Buffer |
|
||||||
gLogger.AddLogger(log.NewLogfmtLogger(&buff), "info", map[string]level.Option{}) |
|
||||||
|
|
||||||
gokit := NewWrapper(gLogger) |
|
||||||
|
|
||||||
for i := 0; i < t.N; i++ { |
|
||||||
_ = level.Info(gokit).Log("msg", "test", "some", "more", "context", "data") |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
func Benchmark_WrapperWriter(t *testing.B) { |
|
||||||
gLogger := glog.New() |
|
||||||
var buff bytes.Buffer |
|
||||||
gLogger.AddLogger(log.NewLogfmtLogger(&buff), "info", map[string]level.Option{}) |
|
||||||
gokit := NewWrapper(gLogger) |
|
||||||
|
|
||||||
for i := 0; i < t.N; i++ { |
|
||||||
_ = level.Info(gokit).Log("msg", "test", "some", "more", "context", "data") |
|
||||||
} |
|
||||||
} |
|
||||||
Loading…
Reference in new issue