Skip to content

Commit 0630cdc

Browse files
tboergerrenovate[bot]
authored andcommitted
feat: replace go-kit logger by slog
1 parent 62505ba commit 0630cdc

File tree

13 files changed

+88
-129
lines changed

13 files changed

+88
-129
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ endif
1616

1717
GOBUILD ?= CGO_ENABLED=0 go build
1818
PACKAGES ?= $(shell go list ./...)
19-
SOURCES ?= $(shell find . -name "*.go" -type f)
19+
SOURCES ?= $(shell find . -name "*.go" -type f -not -path ./.devenv/\* -not -path ./.direnv/\*)
2020
GENERATE ?= $(PACKAGES)
2121

2222
TAGS ?= netgo
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Change: Switch to official logging library
2+
3+
Since there have been a structured logger part of the Go standard library we
4+
thought it's time to replace the library with that. Be aware that log messages
5+
should change a little bit.
6+
7+
https://github.com/promhippie/scw_exporter/issues/104

pkg/action/metrics.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ package action
22

33
import (
44
"fmt"
5+
"log/slog"
56

6-
"github.com/go-kit/log"
7-
"github.com/go-kit/log/level"
87
"github.com/prometheus/client_golang/prometheus"
98
"github.com/prometheus/client_golang/prometheus/collectors"
109
"github.com/promhippie/scw_exporter/pkg/version"
@@ -49,11 +48,9 @@ func init() {
4948
}
5049

5150
type promLogger struct {
52-
logger log.Logger
51+
logger *slog.Logger
5352
}
5453

5554
func (pl promLogger) Println(v ...interface{}) {
56-
level.Error(pl.logger).Log(
57-
"msg", fmt.Sprintln(v...),
58-
)
55+
pl.logger.Error(fmt.Sprintln(v...))
5956
}

pkg/action/server.go

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@ import (
44
"context"
55
"fmt"
66
"io"
7+
"log/slog"
78
"net/http"
89
"os"
910
"os/signal"
1011
"time"
1112

1213
"github.com/go-chi/chi/v5"
13-
"github.com/go-kit/log"
14-
"github.com/go-kit/log/level"
1514
"github.com/oklog/run"
1615
"github.com/prometheus/client_golang/prometheus/promhttp"
1716
"github.com/prometheus/exporter-toolkit/web"
@@ -23,9 +22,8 @@ import (
2322
)
2423

2524
// Server handles the server sub-command.
26-
func Server(cfg *config.Config, logger log.Logger) error {
27-
level.Info(logger).Log(
28-
"msg", "Launching Scaleway Exporter",
25+
func Server(cfg *config.Config, logger *slog.Logger) error {
26+
logger.Info("Launching Scaleway Exporter",
2927
"version", version.String,
3028
"revision", version.Revision,
3129
"date", version.Date,
@@ -35,8 +33,7 @@ func Server(cfg *config.Config, logger log.Logger) error {
3533
accessKey, err := config.Value(cfg.Target.AccessKey)
3634

3735
if err != nil {
38-
level.Error(logger).Log(
39-
"msg", "Failed to load access key from file",
36+
logger.Error("Failed to load access key from file",
4037
"err", err,
4138
)
4239

@@ -46,8 +43,7 @@ func Server(cfg *config.Config, logger log.Logger) error {
4643
secretKey, err := config.Value(cfg.Target.SecretKey)
4744

4845
if err != nil {
49-
level.Error(logger).Log(
50-
"msg", "Failed to load secret key from file",
46+
logger.Error("Failed to load secret key from file",
5147
"err", err,
5248
)
5349

@@ -88,8 +84,7 @@ func Server(cfg *config.Config, logger log.Logger) error {
8884
)
8985

9086
if err != nil {
91-
level.Error(logger).Log(
92-
"msg", "Failed to parse region",
87+
logger.Error("Failed to parse region",
9388
"err", err,
9489
)
9590

@@ -107,8 +102,7 @@ func Server(cfg *config.Config, logger log.Logger) error {
107102
)
108103

109104
if err != nil {
110-
level.Error(logger).Log(
111-
"msg", "Failed to parse zone",
105+
logger.Error("Failed to parse zone",
112106
"err", err,
113107
)
114108

@@ -125,8 +119,7 @@ func Server(cfg *config.Config, logger log.Logger) error {
125119
)
126120

127121
if err != nil {
128-
level.Error(logger).Log(
129-
"msg", "Failed to initialize Scaleway client",
122+
logger.Error("Failed to initialize Scaleway client",
130123
"err", err,
131124
)
132125

@@ -144,9 +137,8 @@ func Server(cfg *config.Config, logger log.Logger) error {
144137
}
145138

146139
gr.Add(func() error {
147-
level.Info(logger).Log(
148-
"msg", "Starting metrics server",
149-
"addr", cfg.Server.Addr,
140+
logger.Info("Starting metrics server",
141+
"address", cfg.Server.Addr,
150142
)
151143

152144
return web.ListenAndServe(
@@ -163,16 +155,14 @@ func Server(cfg *config.Config, logger log.Logger) error {
163155
defer cancel()
164156

165157
if err := server.Shutdown(ctx); err != nil {
166-
level.Error(logger).Log(
167-
"msg", "Failed to shutdown metrics gracefully",
158+
logger.Error("Failed to shutdown metrics gracefully",
168159
"err", err,
169160
)
170161

171162
return
172163
}
173164

174-
level.Info(logger).Log(
175-
"msg", "Metrics shutdown gracefully",
165+
logger.Info("Metrics shutdown gracefully",
176166
"reason", reason,
177167
)
178168
})
@@ -195,7 +185,7 @@ func Server(cfg *config.Config, logger log.Logger) error {
195185
return gr.Run()
196186
}
197187

198-
func handler(cfg *config.Config, logger log.Logger, client *scw.Client) *chi.Mux {
188+
func handler(cfg *config.Config, logger *slog.Logger, client *scw.Client) *chi.Mux {
199189
mux := chi.NewRouter()
200190
mux.Use(middleware.Recoverer(logger))
201191
mux.Use(middleware.RealIP)
@@ -207,9 +197,7 @@ func handler(cfg *config.Config, logger log.Logger, client *scw.Client) *chi.Mux
207197
}
208198

209199
if cfg.Collector.Dashboard {
210-
level.Debug(logger).Log(
211-
"msg", "Dashboard collector registered",
212-
)
200+
logger.Debug("Dashboard collector registered")
213201

214202
registry.MustRegister(exporter.NewDashboardCollector(
215203
logger,
@@ -221,9 +209,7 @@ func handler(cfg *config.Config, logger log.Logger, client *scw.Client) *chi.Mux
221209
}
222210

223211
if cfg.Collector.SecurityGroups {
224-
level.Debug(logger).Log(
225-
"msg", "Security group collector registered",
226-
)
212+
logger.Debug("Security group collector registered")
227213

228214
registry.MustRegister(exporter.NewSecurityGroupCollector(
229215
logger,
@@ -235,9 +221,7 @@ func handler(cfg *config.Config, logger log.Logger, client *scw.Client) *chi.Mux
235221
}
236222

237223
if cfg.Collector.Servers {
238-
level.Debug(logger).Log(
239-
"msg", "Server collector registered",
240-
)
224+
logger.Debug("Server collector registered")
241225

242226
registry.MustRegister(exporter.NewServerCollector(
243227
logger,
@@ -249,9 +233,7 @@ func handler(cfg *config.Config, logger log.Logger, client *scw.Client) *chi.Mux
249233
}
250234

251235
if cfg.Collector.Snapshots {
252-
level.Debug(logger).Log(
253-
"msg", "Snaptshot collector registered",
254-
)
236+
logger.Debug("Snaptshot collector registered")
255237

256238
registry.MustRegister(exporter.NewSnapshotCollector(
257239
logger,
@@ -263,9 +245,7 @@ func handler(cfg *config.Config, logger log.Logger, client *scw.Client) *chi.Mux
263245
}
264246

265247
if cfg.Collector.Volumes {
266-
level.Debug(logger).Log(
267-
"msg", "Volume collector registered",
268-
)
248+
logger.Debug("Volume collector registered")
269249

270250
registry.MustRegister(exporter.NewVolumeCollector(
271251
logger,

pkg/command/command.go

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"os"
66
"time"
77

8-
"github.com/go-kit/log/level"
98
"github.com/promhippie/scw_exporter/pkg/action"
109
"github.com/promhippie/scw_exporter/pkg/config"
1110
"github.com/promhippie/scw_exporter/pkg/version"
@@ -34,18 +33,12 @@ func Run() error {
3433
logger := setupLogger(cfg)
3534

3635
if cfg.Target.AccessKey == "" {
37-
level.Error(logger).Log(
38-
"msg", "Missing required scw.access-key",
39-
)
40-
36+
logger.Error("Missing required scw.access-key")
4137
return fmt.Errorf("missing required scw.access-key")
4238
}
4339

4440
if cfg.Target.SecretKey == "" {
45-
level.Error(logger).Log(
46-
"msg", "Missing required scw.secret-key",
47-
)
48-
41+
logger.Error("Missing required scw.secret-key")
4942
return fmt.Errorf("missing required scw.secret-key")
5043
}
5144

pkg/command/health.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"fmt"
55
"net/http"
66

7-
"github.com/go-kit/log/level"
87
"github.com/promhippie/scw_exporter/pkg/config"
98
"github.com/urfave/cli/v2"
109
)
@@ -26,8 +25,7 @@ func Health(cfg *config.Config) *cli.Command {
2625
)
2726

2827
if err != nil {
29-
level.Error(logger).Log(
30-
"msg", "Failed to request health check",
28+
logger.Error("Failed to request health check",
3129
"err", err,
3230
)
3331

@@ -37,15 +35,18 @@ func Health(cfg *config.Config) *cli.Command {
3735
defer resp.Body.Close()
3836

3937
if resp.StatusCode != 200 {
40-
level.Error(logger).Log(
41-
"msg", "Health check seems to be in bad state",
38+
logger.Error("Health check seems to be in bad state",
4239
"err", err,
4340
"code", resp.StatusCode,
4441
)
4542

4643
return err
4744
}
4845

46+
logger.Debug("Health check seems to be fine",
47+
"code", resp.StatusCode,
48+
)
49+
4950
return nil
5051
},
5152
}

pkg/command/setup.go

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,40 @@
11
package command
22

33
import (
4+
"log/slog"
45
"os"
56
"strings"
67

7-
"github.com/go-kit/log"
8-
"github.com/go-kit/log/level"
98
"github.com/promhippie/scw_exporter/pkg/config"
109
)
1110

12-
func setupLogger(cfg *config.Config) log.Logger {
13-
var logger log.Logger
14-
11+
func setupLogger(cfg *config.Config) *slog.Logger {
1512
if cfg.Logs.Pretty {
16-
logger = log.NewSyncLogger(
17-
log.NewLogfmtLogger(os.Stdout),
18-
)
19-
} else {
20-
logger = log.NewSyncLogger(
21-
log.NewJSONLogger(os.Stdout),
13+
return slog.New(
14+
slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
15+
Level: loggerLevel(cfg),
16+
}),
2217
)
2318
}
2419

20+
return slog.New(
21+
slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
22+
Level: loggerLevel(cfg),
23+
}),
24+
)
25+
}
26+
27+
func loggerLevel(cfg *config.Config) slog.Leveler {
2528
switch strings.ToLower(cfg.Logs.Level) {
2629
case "error":
27-
logger = level.NewFilter(logger, level.AllowError())
30+
return slog.LevelError
2831
case "warn":
29-
logger = level.NewFilter(logger, level.AllowWarn())
32+
return slog.LevelWarn
3033
case "info":
31-
logger = level.NewFilter(logger, level.AllowInfo())
34+
return slog.LevelInfo
3235
case "debug":
33-
logger = level.NewFilter(logger, level.AllowDebug())
34-
default:
35-
logger = level.NewFilter(logger, level.AllowInfo())
36+
return slog.LevelDebug
3637
}
3738

38-
return log.With(
39-
logger,
40-
"ts", log.DefaultTimestampUTC,
41-
)
39+
return slog.LevelInfo
4240
}

pkg/exporter/dashboard.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package exporter
22

33
import (
4+
"log/slog"
45
"time"
56

6-
"github.com/go-kit/log"
7-
"github.com/go-kit/log/level"
87
"github.com/prometheus/client_golang/prometheus"
98
"github.com/promhippie/scw_exporter/pkg/config"
109
"github.com/scaleway/scaleway-sdk-go/api/instance/v1"
@@ -15,7 +14,7 @@ import (
1514
type DashboardCollector struct {
1615
client *scw.Client
1716
instance *instance.API
18-
logger log.Logger
17+
logger *slog.Logger
1918
failures *prometheus.CounterVec
2019
duration *prometheus.HistogramVec
2120
config config.Target
@@ -40,7 +39,7 @@ type DashboardCollector struct {
4039
}
4140

4241
// NewDashboardCollector returns a new DashboardCollector.
43-
func NewDashboardCollector(logger log.Logger, client *scw.Client, failures *prometheus.CounterVec, duration *prometheus.HistogramVec, cfg config.Target) *DashboardCollector {
42+
func NewDashboardCollector(logger *slog.Logger, client *scw.Client, failures *prometheus.CounterVec, duration *prometheus.HistogramVec, cfg config.Target) *DashboardCollector {
4443
if failures != nil {
4544
failures.WithLabelValues("dashboard").Add(0)
4645
}
@@ -49,7 +48,7 @@ func NewDashboardCollector(logger log.Logger, client *scw.Client, failures *prom
4948
collector := &DashboardCollector{
5049
client: client,
5150
instance: instance.NewAPI(client),
52-
logger: log.With(logger, "collector", "dashboard"),
51+
logger: logger.With("collector", "dashboard"),
5352
failures: failures,
5453
duration: duration,
5554
config: cfg,
@@ -209,8 +208,7 @@ func (c *DashboardCollector) Collect(ch chan<- prometheus.Metric) {
209208
c.duration.WithLabelValues("dashboard").Observe(time.Since(now).Seconds())
210209

211210
if err != nil {
212-
level.Error(c.logger).Log(
213-
"msg", "Failed to fetch dashboard",
211+
c.logger.Error("Failed to fetch dashboard",
214212
"zone", zone,
215213
"err", err,
216214
)

0 commit comments

Comments
 (0)