2020-06-11 09:14:05 -05:00
|
|
|
package grpcplugin
|
2019-10-29 11:22:31 -05:00
|
|
|
|
|
|
|
import (
|
|
|
|
"io"
|
|
|
|
"io/ioutil"
|
|
|
|
"log"
|
|
|
|
|
|
|
|
glog "github.com/grafana/grafana/pkg/infra/log"
|
|
|
|
hclog "github.com/hashicorp/go-hclog"
|
|
|
|
)
|
|
|
|
|
|
|
|
type logWrapper struct {
|
|
|
|
Logger glog.Logger
|
|
|
|
}
|
|
|
|
|
2019-11-20 07:27:28 -06:00
|
|
|
func formatArgs(args ...interface{}) []interface{} {
|
|
|
|
if len(args) == 0 || len(args)%2 != 0 {
|
|
|
|
return args
|
|
|
|
}
|
|
|
|
|
|
|
|
res := []interface{}{}
|
|
|
|
|
2019-11-20 09:57:55 -06:00
|
|
|
for n := 0; n < len(args); n += 2 {
|
2019-11-20 07:27:28 -06:00
|
|
|
key := args[n]
|
|
|
|
|
|
|
|
if stringKey, ok := key.(string); ok && stringKey == "timestamp" {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
res = append(res, key)
|
|
|
|
res = append(res, args[n+1])
|
|
|
|
}
|
|
|
|
|
|
|
|
return res
|
|
|
|
}
|
|
|
|
|
2019-10-29 11:22:31 -05:00
|
|
|
func (lw logWrapper) Trace(msg string, args ...interface{}) {
|
2019-11-20 07:27:28 -06:00
|
|
|
lw.Logger.Debug(msg, formatArgs(args...)...)
|
2019-10-29 11:22:31 -05:00
|
|
|
}
|
|
|
|
func (lw logWrapper) Debug(msg string, args ...interface{}) {
|
2019-11-20 07:27:28 -06:00
|
|
|
lw.Logger.Debug(msg, formatArgs(args...)...)
|
2019-10-29 11:22:31 -05:00
|
|
|
}
|
|
|
|
func (lw logWrapper) Info(msg string, args ...interface{}) {
|
2019-11-20 07:27:28 -06:00
|
|
|
lw.Logger.Info(msg, formatArgs(args...)...)
|
2019-10-29 11:22:31 -05:00
|
|
|
}
|
|
|
|
func (lw logWrapper) Warn(msg string, args ...interface{}) {
|
2019-11-20 07:27:28 -06:00
|
|
|
lw.Logger.Warn(msg, formatArgs(args...)...)
|
2019-10-29 11:22:31 -05:00
|
|
|
}
|
|
|
|
func (lw logWrapper) Error(msg string, args ...interface{}) {
|
2019-11-20 07:27:28 -06:00
|
|
|
lw.Logger.Error(msg, formatArgs(args...)...)
|
2019-10-29 11:22:31 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
func (lw logWrapper) IsTrace() bool { return true }
|
|
|
|
func (lw logWrapper) IsDebug() bool { return true }
|
|
|
|
func (lw logWrapper) IsInfo() bool { return true }
|
|
|
|
func (lw logWrapper) IsWarn() bool { return true }
|
|
|
|
func (lw logWrapper) IsError() bool { return true }
|
|
|
|
|
|
|
|
func (lw logWrapper) With(args ...interface{}) hclog.Logger {
|
|
|
|
return logWrapper{Logger: lw.Logger.New(args...)}
|
|
|
|
}
|
|
|
|
func (lw logWrapper) Named(name string) hclog.Logger {
|
2020-04-16 06:08:07 -05:00
|
|
|
if name == "stdio" {
|
|
|
|
// discard logs from stdio hashicorp/go-plugin gRPC service since
|
|
|
|
// it's not enabled/in use per default.
|
|
|
|
// discard debug log of "waiting for stdio data".
|
|
|
|
// discard warn log of "received EOF, stopping recv loop".
|
|
|
|
return hclog.NewNullLogger()
|
|
|
|
}
|
|
|
|
return logWrapper{
|
|
|
|
Logger: lw.Logger.New(),
|
|
|
|
}
|
2019-10-29 11:22:31 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
func (lw logWrapper) ResetNamed(name string) hclog.Logger {
|
|
|
|
return logWrapper{Logger: lw.Logger.New()}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (lw logWrapper) StandardLogger(ops *hclog.StandardLoggerOptions) *log.Logger {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (lw logWrapper) SetLevel(level hclog.Level) {}
|
|
|
|
|
|
|
|
// Return a value that conforms to io.Writer, which can be passed into log.SetOutput()
|
|
|
|
func (lw logWrapper) StandardWriter(opts *hclog.StandardLoggerOptions) io.Writer {
|
|
|
|
return ioutil.Discard
|
|
|
|
}
|