Log: Fix text logging for unsupported types (#51306) (#52311)

* Fix text log for unsupported types

* Apply suggestions from code review

Co-authored-by: Emil Tullstedt <emil.tullstedt@grafana.com>
(cherry picked from commit 84e2e1ec8e)

Co-authored-by: Sofia Papagiannaki <1632407+papagian@users.noreply.github.com>
This commit is contained in:
Grot (@grafanabot)
2022-07-15 04:46:12 -04:00
committed by GitHub
co-authored by Sofia Papagiannaki
parent 802a508723
commit bb9d55cbd9
2 changed files with 43 additions and 3 deletions
+4 -3
View File
@@ -23,6 +23,7 @@ import (
"github.com/grafana/grafana/pkg/infra/log/level"
"github.com/grafana/grafana/pkg/infra/log/term"
"github.com/grafana/grafana/pkg/infra/log/text"
"github.com/grafana/grafana/pkg/util"
"github.com/grafana/grafana/pkg/util/errutil"
)
@@ -329,11 +330,11 @@ func getLogFormat(format string) Formatedlogger {
}
}
return func(w io.Writer) gokitlog.Logger {
return gokitlog.NewLogfmtLogger(w)
return text.NewTextLogger(w)
}
case "text":
return func(w io.Writer) gokitlog.Logger {
return gokitlog.NewLogfmtLogger(w)
return text.NewTextLogger(w)
}
case "json":
return func(w io.Writer) gokitlog.Logger {
@@ -341,7 +342,7 @@ func getLogFormat(format string) Formatedlogger {
}
default:
return func(w io.Writer) gokitlog.Logger {
return gokitlog.NewLogfmtLogger(w)
return text.NewTextLogger(w)
}
}
}
+39
View File
@@ -0,0 +1,39 @@
package text
import (
"encoding"
"fmt"
"io"
"reflect"
gokitlog "github.com/go-kit/kit/log"
)
type textLogger struct {
w io.Writer
}
// NewTextLogger similar to gokitlog.NewLogfmtLogger
// but converts unsupported types to string
func NewTextLogger(w io.Writer) gokitlog.Logger {
return &textLogger{w}
}
func (l textLogger) Log(keyvals ...interface{}) error {
for i, val := range keyvals {
switch val.(type) {
case nil, string, []byte, encoding.TextMarshaler, error, fmt.Stringer: // supported natively by gokit.
default:
switch reflect.TypeOf(val).Kind() {
case reflect.Array, reflect.Chan, reflect.Func, reflect.Map, reflect.Slice, reflect.Struct:
keyvals[i] = fmt.Sprintf("%+v", val)
default:
}
}
}
ll := gokitlog.NewLogfmtLogger(l.w)
if err := ll.Log(keyvals...); err != nil {
return err
}
return nil
}