Skip to content

Commit 66bb7d8

Browse files
example: use slog (#735)
Signed-off-by: Olivier Cano <[email protected]>
1 parent a78cb17 commit 66bb7d8

File tree

4 files changed

+26
-59
lines changed

4 files changed

+26
-59
lines changed

examples/client/main.go

+13-26
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,12 @@ package main
55

66
import (
77
"context"
8-
"fmt"
8+
"log/slog"
99
"net/http"
1010
"os"
1111
"syscall"
1212
"time"
1313

14-
"github.com/go-kit/log"
15-
"github.com/go-kit/log/level"
1614
grpcprom "github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus"
1715
"github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/logging"
1816
"github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/timeout"
@@ -38,29 +36,18 @@ const (
3836
targetGRPCAddr = "localhost:8080"
3937
)
4038

41-
// interceptorLogger adapts go-kit logger to interceptor logger.
39+
// interceptorLogger adapts slog logger to interceptor logger.
4240
// This code is simple enough to be copied and not imported.
43-
func interceptorLogger(l log.Logger) logging.Logger {
44-
return logging.LoggerFunc(func(_ context.Context, lvl logging.Level, msg string, fields ...any) {
45-
largs := append([]any{"msg", msg}, fields...)
46-
switch lvl {
47-
case logging.LevelDebug:
48-
_ = level.Debug(l).Log(largs...)
49-
case logging.LevelInfo:
50-
_ = level.Info(l).Log(largs...)
51-
case logging.LevelWarn:
52-
_ = level.Warn(l).Log(largs...)
53-
case logging.LevelError:
54-
_ = level.Error(l).Log(largs...)
55-
default:
56-
panic(fmt.Sprintf("unknown level %v", lvl))
57-
}
41+
func interceptorLogger(l *slog.Logger) logging.Logger {
42+
return logging.LoggerFunc(func(ctx context.Context, lvl logging.Level, msg string, fields ...any) {
43+
l.Log(ctx, slog.Level(lvl), msg, fields...)
5844
})
5945
}
46+
6047
func main() {
6148
// Setup logging.
62-
logger := log.NewLogfmtLogger(os.Stderr)
63-
rpcLogger := log.With(logger, "service", "gRPC/client", "component", component)
49+
logger := slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{}))
50+
rpcLogger := logger.With("service", "gRPC/client", "component", component)
6451
logTraceID := func(ctx context.Context) logging.Fields {
6552
if span := trace.SpanContextFromContext(ctx); span.IsSampled() {
6653
return logging.Fields{"traceID", span.TraceID().String()}
@@ -86,7 +73,7 @@ func main() {
8673
// Set up OTLP tracing (stdout for debug).
8774
exporter, err := stdout.New(stdout.WithPrettyPrint())
8875
if err != nil {
89-
level.Error(logger).Log("err", err)
76+
logger.Error("failed to init exporter", "err", err)
9077
os.Exit(1)
9178
}
9279
tp := sdktrace.NewTracerProvider(
@@ -110,7 +97,7 @@ func main() {
11097
logging.StreamClientInterceptor(interceptorLogger(rpcLogger), logging.WithFieldsFromContext(logTraceID))),
11198
)
11299
if err != nil {
113-
level.Error(logger).Log("err", err)
100+
logger.Error("failed to init gRPC client", "err", err)
114101
os.Exit(1)
115102
}
116103

@@ -148,18 +135,18 @@ func main() {
148135
},
149136
))
150137
httpSrv.Handler = m
151-
level.Info(logger).Log("msg", "starting HTTP server", "addr", httpSrv.Addr)
138+
logger.Info("starting HTTP server", "addr", httpSrv.Addr)
152139
return httpSrv.ListenAndServe()
153140
}, func(error) {
154141
if err := httpSrv.Close(); err != nil {
155-
level.Error(logger).Log("msg", "failed to stop web server", "err", err)
142+
logger.Error("failed to stop web server", "err", err)
156143
}
157144
})
158145

159146
g.Add(run.SignalHandler(context.Background(), syscall.SIGINT, syscall.SIGTERM))
160147

161148
if err := g.Run(); err != nil {
162-
level.Error(logger).Log("err", err)
149+
logger.Error("program interrupted", "err", err)
163150
os.Exit(1)
164151
}
165152
}

examples/go.mod

-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ go 1.22
55
toolchain go1.23.1
66

77
require (
8-
github.com/go-kit/log v0.2.1
98
github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0
109
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0
1110
github.com/oklog/run v1.1.0
@@ -22,7 +21,6 @@ require (
2221
github.com/beorn7/perks v1.0.1 // indirect
2322
github.com/cespare/xxhash/v2 v2.3.0 // indirect
2423
github.com/davecgh/go-spew v1.1.1 // indirect
25-
github.com/go-logfmt/logfmt v0.5.1 // indirect
2624
github.com/go-logr/logr v1.4.2 // indirect
2725
github.com/go-logr/stdr v1.2.2 // indirect
2826
github.com/google/uuid v1.6.0 // indirect

examples/go.sum

-4
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,6 @@ github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL
88
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
99
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
1010
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
11-
github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
12-
github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
13-
github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
14-
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
1511
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
1612
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
1713
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=

examples/server/main.go

+13-27
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@ package main
55

66
import (
77
"context"
8-
"fmt"
8+
"log/slog"
99
"net"
1010
"net/http"
1111
"os"
1212
"runtime/debug"
1313
"syscall"
1414

15-
"github.com/go-kit/log"
16-
"github.com/go-kit/log/level"
1715
grpcprom "github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus"
1816
"github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors"
1917
"github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/auth"
@@ -43,30 +41,18 @@ const (
4341
httpAddr = ":8081"
4442
)
4543

46-
// interceptorLogger adapts go-kit logger to interceptor logger.
44+
// interceptorLogger adapts slog logger to interceptor logger.
4745
// This code is simple enough to be copied and not imported.
48-
func interceptorLogger(l log.Logger) logging.Logger {
49-
return logging.LoggerFunc(func(_ context.Context, lvl logging.Level, msg string, fields ...any) {
50-
largs := append([]any{"msg", msg}, fields...)
51-
switch lvl {
52-
case logging.LevelDebug:
53-
_ = level.Debug(l).Log(largs...)
54-
case logging.LevelInfo:
55-
_ = level.Info(l).Log(largs...)
56-
case logging.LevelWarn:
57-
_ = level.Warn(l).Log(largs...)
58-
case logging.LevelError:
59-
_ = level.Error(l).Log(largs...)
60-
default:
61-
panic(fmt.Sprintf("unknown level %v", lvl))
62-
}
46+
func interceptorLogger(l *slog.Logger) logging.Logger {
47+
return logging.LoggerFunc(func(ctx context.Context, lvl logging.Level, msg string, fields ...any) {
48+
l.Log(ctx, slog.Level(lvl), msg, fields...)
6349
})
6450
}
6551

6652
func main() {
6753
// Setup logging.
68-
logger := log.NewLogfmtLogger(os.Stderr)
69-
rpcLogger := log.With(logger, "service", "gRPC/server", "component", component)
54+
logger := slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{}))
55+
rpcLogger := logger.With("service", "gRPC/server", "component", component)
7056
logTraceID := func(ctx context.Context) logging.Fields {
7157
if span := trace.SpanContextFromContext(ctx); span.IsSampled() {
7258
return logging.Fields{"traceID", span.TraceID().String()}
@@ -92,7 +78,7 @@ func main() {
9278
// Set up OTLP tracing (stdout for debug).
9379
exporter, err := stdout.New(stdout.WithPrettyPrint())
9480
if err != nil {
95-
level.Error(logger).Log("err", err)
81+
logger.Error("failed to init exporter", "err", err)
9682
os.Exit(1)
9783
}
9884
tp := sdktrace.NewTracerProvider(
@@ -129,7 +115,7 @@ func main() {
129115
})
130116
grpcPanicRecoveryHandler := func(p any) (err error) {
131117
panicsTotal.Inc()
132-
level.Error(rpcLogger).Log("msg", "recovered from panic", "panic", p, "stack", debug.Stack())
118+
rpcLogger.Error("recovered from panic", "panic", p, "stack", debug.Stack())
133119
return status.Errorf(codes.Internal, "%s", p)
134120
}
135121

@@ -158,7 +144,7 @@ func main() {
158144
if err != nil {
159145
return err
160146
}
161-
level.Info(logger).Log("msg", "starting gRPC server", "addr", l.Addr().String())
147+
logger.Info("starting gRPC server", "addr", l.Addr().String())
162148
return grpcSrv.Serve(l)
163149
}, func(err error) {
164150
grpcSrv.GracefulStop()
@@ -177,18 +163,18 @@ func main() {
177163
},
178164
))
179165
httpSrv.Handler = m
180-
level.Info(logger).Log("msg", "starting HTTP server", "addr", httpSrv.Addr)
166+
logger.Info("starting HTTP server", "addr", httpSrv.Addr)
181167
return httpSrv.ListenAndServe()
182168
}, func(error) {
183169
if err := httpSrv.Close(); err != nil {
184-
level.Error(logger).Log("msg", "failed to stop web server", "err", err)
170+
logger.Error("failed to stop web server", "err", err)
185171
}
186172
})
187173

188174
g.Add(run.SignalHandler(context.Background(), syscall.SIGINT, syscall.SIGTERM))
189175

190176
if err := g.Run(); err != nil {
191-
level.Error(logger).Log("err", err)
177+
logger.Error("program interrupted", "err", err)
192178
os.Exit(1)
193179
}
194180
}

0 commit comments

Comments
 (0)