Skip to content

Commit 57efc2a

Browse files
authored
Add a func to convert go-kit log to slog (#7969)
Signed-off-by: SungJin1212 <[email protected]>
1 parent 8cd83bf commit 57efc2a

File tree

5 files changed

+97
-1
lines changed

5 files changed

+97
-1
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ require (
117117
)
118118

119119
require (
120+
github.com/tjhop/slog-gokit v0.1.2
120121
go.opentelemetry.io/collector/pdata v1.14.1
121122
go.opentelemetry.io/collector/semconv v0.108.1
122123
)

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2255,6 +2255,8 @@ github.com/themihai/gomemcache v0.0.0-20180902122335-24332e2d58ab h1:7ZR3hmisBWw
22552255
github.com/themihai/gomemcache v0.0.0-20180902122335-24332e2d58ab/go.mod h1:eheTFp954zcWZXCU8d0AT76ftsQOTo4DTqkN/h3k1MY=
22562256
github.com/tinylib/msgp v1.1.5 h1:2gXmtWueD2HefZHQe1QOy9HVzmFrLOVvsXwXBQ0ayy0=
22572257
github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg=
2258+
github.com/tjhop/slog-gokit v0.1.2 h1:pmQI4SvU9h4gA0vIQsdhJQSqQg4mOmsPykG2/PM3j1I=
2259+
github.com/tjhop/slog-gokit v0.1.2/go.mod h1:8fhlcp8C8ELbg3GCyKv06tgt4B5sDq2P1r2DQAu1HuM=
22582260
github.com/tklauser/go-sysconf v0.3.4/go.mod h1:Cl2c8ZRWfHD5IrfHo9VN+FX9kCFjIOyVklgXycLB6ek=
22592261
github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw=
22602262
github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk=

pkg/logging/logger.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ const (
1515
LogFormatJSON = "json"
1616
)
1717

18+
type LevelLogger struct {
19+
log.Logger
20+
LogLevel string
21+
}
22+
1823
// NewLogger returns a log.Logger that prints in the provided format at the
1924
// provided level with a UTC timestamp and the caller of the log entry. If non
2025
// empty, the debug name is also appended as a field to all log lines. Panics
@@ -55,5 +60,8 @@ func NewLogger(logLevel, logFormat, debugName string) log.Logger {
5560
logger = log.With(logger, "name", debugName)
5661
}
5762

58-
return logger
63+
return LevelLogger{
64+
Logger: logger,
65+
LogLevel: logLevel,
66+
}
5967
}

pkg/logutil/logutil.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright (c) The Thanos Authors.
2+
// Licensed under the Apache License 2.0.
3+
4+
package logutil
5+
6+
import (
7+
"log/slog"
8+
9+
"github.com/go-kit/log"
10+
"github.com/thanos-io/thanos/pkg/logging"
11+
sloggk "github.com/tjhop/slog-gokit"
12+
)
13+
14+
// GoKitLogToSlog convert go-kit/log to slog.
15+
func GoKitLogToSlog(logger log.Logger) *slog.Logger {
16+
levelVar := slog.LevelVar{}
17+
levelLogger, ok := logger.(logging.LevelLogger)
18+
if !ok {
19+
levelVar.Set(slog.LevelDebug)
20+
} else {
21+
switch levelLogger.LogLevel {
22+
case "debug":
23+
levelVar.Set(slog.LevelDebug)
24+
case "info":
25+
levelVar.Set(slog.LevelInfo)
26+
case "warn":
27+
levelVar.Set(slog.LevelWarn)
28+
case "error":
29+
levelVar.Set(slog.LevelError)
30+
}
31+
}
32+
return slog.New(sloggk.NewGoKitHandler(logger, &levelVar))
33+
}

pkg/logutil/logutil_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// Copyright (c) The Thanos Authors.
2+
// Licensed under the Apache License 2.0.
3+
4+
package logutil
5+
6+
import (
7+
"context"
8+
"log/slog"
9+
"testing"
10+
11+
"github.com/go-kit/log/level"
12+
"github.com/stretchr/testify/require"
13+
"github.com/thanos-io/thanos/pkg/logging"
14+
)
15+
16+
func Test_GoKitLogToSlog(t *testing.T) {
17+
ctx := context.Background()
18+
logLevels := []string{"debug", "info", "warn", "error"}
19+
slogLevels := []slog.Level{slog.LevelDebug, slog.LevelInfo, slog.LevelWarn, slog.LevelError}
20+
21+
for _, logFormat := range []string{"logfmt", "json"} {
22+
for i, lv := range logLevels {
23+
logger := logging.NewLogger(lv, logFormat, "test")
24+
25+
slog := GoKitLogToSlog(logger)
26+
for j, slogLv := range slogLevels {
27+
if i <= j {
28+
t.Logf("[logFormat: %v, go-kit log level: %v, slog level: %v] slog should be enabled", logFormat, lv, slogLv)
29+
require.True(t, slog.Enabled(ctx, slogLv))
30+
} else {
31+
t.Logf("[logFormat: %v, go-kit log level: %v, slog level: %v] slog should be disabled", logFormat, lv, slogLv)
32+
require.False(t, slog.Enabled(ctx, slogLv))
33+
}
34+
35+
switch lv {
36+
case "debug":
37+
level.Debug(logger).Log("msg", "message", "debug", lv)
38+
slog.Debug("message", "debug", lv)
39+
case "info":
40+
level.Info(logger).Log("msg", "message", "info", lv)
41+
slog.Info("message", "info", lv)
42+
case "warn":
43+
level.Warn(logger).Log("msg", "message", "warn", lv)
44+
slog.Warn("message", "warn", lv)
45+
case "error":
46+
level.Error(logger).Log("msg", "message", "error", lv)
47+
slog.Error("message", "error", lv)
48+
}
49+
}
50+
}
51+
}
52+
}

0 commit comments

Comments
 (0)