From eaa003f5afbe2121967b7f039239b7616ee8abd0 Mon Sep 17 00:00:00 2001 From: Calle Pettersson Date: Sat, 30 Jan 2021 11:17:29 +0100 Subject: [PATCH] Add gokit adapter to make https toolkit work Signed-off-by: Calle Pettersson --- exporter.go | 4 ++-- go.mod | 1 + log/gokit_adapter.go | 46 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 log/gokit_adapter.go diff --git a/exporter.go b/exporter.go index 2a2a19b8..f474d9fe 100644 --- a/exporter.go +++ b/exporter.go @@ -404,8 +404,8 @@ func main() { go func() { log.Infoln("Starting server on", *listenAddress) server := &http.Server{Addr: *listenAddress} - if err := https.Listen(server, *httpsConfig, logger); err != nil { - log.Fatalf("cannot start windows_exporter: %s", err) + if err := https.Listen(server, *httpsConfig, log.NewToolkitAdapter()); err != nil { + log.Fatalf("cannot start windows_exporter: %s", err) } }() diff --git a/go.mod b/go.mod index a165f5dc..be9ada88 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/Microsoft/hcsshim v0.8.6 github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f github.com/dimchansky/utfbom v1.1.0 + github.com/go-kit/kit v0.10.0 github.com/go-ole/go-ole v1.2.1 // indirect github.com/google/go-cmp v0.5.1 // indirect github.com/leoluk/perflib_exporter v0.1.0 diff --git a/log/gokit_adapter.go b/log/gokit_adapter.go new file mode 100644 index 00000000..7230df3b --- /dev/null +++ b/log/gokit_adapter.go @@ -0,0 +1,46 @@ +package log + +import ( + "github.com/go-kit/kit/log/level" +) + +// Returns an adapter implementing the go-kit/kit/log.Logger interface on our +// logrus logger +func NewToolkitAdapter() *logAdapter { + return &logAdapter{} +} + +type logAdapter struct{} + +func (*logAdapter) Log(keyvals ...interface{}) error { + var lvl level.Value + var msg string + for i := 0; i < len(keyvals); i += 2 { + switch keyvals[i] { + case "level": + tlvl, ok := keyvals[i+1].(level.Value) + if !ok { + Warnf("Could not cast level of type %T", keyvals[i+1]) + } else { + lvl = tlvl + } + case "msg": + msg = keyvals[i+1].(string) + } + } + + switch lvl { + case level.ErrorValue(): + Errorln(msg) + case level.WarnValue(): + Warnln(msg) + case level.InfoValue(): + Infoln(msg) + case level.DebugValue(): + Debugln(msg) + default: + Warnf("Unmatched log level: '%v' for message %q", lvl, msg) + } + + return nil +}