From 35a47d888280cf8dba1cced13fbbf08d92e23f79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorben=20G=C3=BCnther?= Date: Mon, 14 Aug 2023 00:59:20 +0200 Subject: [PATCH] Use "log/slog" for logging --- go.mod | 2 +- go.sum | 4 ++-- graph/resolver.go | 5 +++-- graph/schema.resolvers.go | 17 ++++++++++++----- server.go | 37 +++++++++++++++++++++++++------------ 5 files changed, 43 insertions(+), 22 deletions(-) diff --git a/go.mod b/go.mod index 3805384..8ef6d76 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.21.0 require ( git.sr.ht/~emersion/go-scfg v0.0.0-20230601130942-e042ab15616e - git.xenrox.net/~xenrox/go-log v0.0.0-20230813141354-3cf86abf0512 + git.xenrox.net/~xenrox/go-utils v0.0.0-20230813142628-a8bdc9211a98 github.com/99designs/gqlgen v0.17.36 github.com/lib/pq v1.10.9 github.com/vektah/gqlparser/v2 v2.5.8 diff --git a/go.sum b/go.sum index addb50d..7802e7f 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ git.sr.ht/~emersion/go-scfg v0.0.0-20230601130942-e042ab15616e h1:42zyo0ZFxHGkysM1B9EM7PnQNO0TEzPm+bw/2Zontyg= git.sr.ht/~emersion/go-scfg v0.0.0-20230601130942-e042ab15616e/go.mod h1:ybgvEJTIx5XbaspSviB3KNa6OdPmAZqDoSud7z8fFlw= -git.xenrox.net/~xenrox/go-log v0.0.0-20230813141354-3cf86abf0512 h1:v0gWNdBBvmPICyx29lm6zosPQzLyAZLxSn8hjaaWV2E= -git.xenrox.net/~xenrox/go-log v0.0.0-20230813141354-3cf86abf0512/go.mod h1:d98WFDHGpxaEThKue5CfGtr9OrWgbaApprt3GH+OM4s= +git.xenrox.net/~xenrox/go-utils v0.0.0-20230813142628-a8bdc9211a98 h1:c6B8yMLiPWj8Fqp3AeLBB86gKhdz2hfgAupaNpmMRMo= +git.xenrox.net/~xenrox/go-utils v0.0.0-20230813142628-a8bdc9211a98/go.mod h1:BM4sMPD0fqFB6eG1T/7rGgEUiqZsMpHvq4PGE861Sfk= github.com/99designs/gqlgen v0.17.36 h1:u/o/rv2SZ9s5280dyUOOrkpIIkr/7kITMXYD3rkJ9go= github.com/99designs/gqlgen v0.17.36/go.mod h1:6RdyY8puhCoWAQVr2qzF2OMVfudQzc8ACxzpzluoQm4= github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8= diff --git a/graph/resolver.go b/graph/resolver.go index 565241a..c537fd0 100644 --- a/graph/resolver.go +++ b/graph/resolver.go @@ -3,9 +3,10 @@ package graph //go:generate go run github.com/99designs/gqlgen generate import ( + "log/slog" + "git.xenrox.net/~xenrox/10man-api/config" "git.xenrox.net/~xenrox/10man-api/database" - "git.xenrox.net/~xenrox/go-log" ) // This file will not be regenerated automatically. @@ -15,7 +16,7 @@ import ( type Resolver struct { DB *database.DB Config *config.Config - Logger *log.Logger + Logger *slog.Logger } func (r *Resolver) playersInQueue() (int, error) { diff --git a/graph/schema.resolvers.go b/graph/schema.resolvers.go index 2518b63..00d9c98 100644 --- a/graph/schema.resolvers.go +++ b/graph/schema.resolvers.go @@ -11,6 +11,7 @@ import ( "errors" "fmt" "io" + "log/slog" "math/rand" "net/http" "time" @@ -74,7 +75,9 @@ func (r *mutationResolver) CreateUser(ctx context.Context, input model.NewUser) return "", database.CheckErrorCode(err) } - r.Logger.Infof("Created user %q (SteamID %s, Elo %d).", name, input.SteamID, elo.Elo) + r.Logger.Info("Created user", + slog.String("ID", input.SteamID), + slog.Int("elo", elo.Elo)) return "Created", nil } @@ -90,7 +93,9 @@ func (r *mutationResolver) DeleteUser(ctx context.Context, id int) (string, erro return "", err } - r.Logger.Infof("Deleted user %q (SteamID %s)", name, steamID) + r.Logger.Info("Deleted user", + slog.String("name", name), + slog.String("ID", steamID)) return "Deleted", nil } @@ -163,7 +168,9 @@ func (r *mutationResolver) UpdateUser(ctx context.Context, id int, input model.U return nil, err } - r.Logger.Infof("Updated user with ID %d: %v", id, input) + r.Logger.Info("Updated user", + slog.Int("ID", id), + slog.Any("input", input)) return &user, nil } @@ -424,8 +431,8 @@ func (r *mutationResolver) FinishMatch(ctx context.Context, winner string) (stri if err != nil { return "FinishFail", err } - r.Logger.Infof("%s won the match.", winner) - r.Logger.Debugf("Team 1 got %d Elo, Team 2 got %d Elo.", delta1, delta2) + r.Logger.Info(fmt.Sprintf("%s won the match.", winner)) + r.Logger.Debug(fmt.Sprintf("Team 1 got %d Elo, Team 2 got %d Elo.", delta1, delta2)) return "FinishSuccess", nil } diff --git a/server.go b/server.go index 7611bc4..f06b6c8 100644 --- a/server.go +++ b/server.go @@ -2,6 +2,8 @@ package main import ( "flag" + "fmt" + "log/slog" "net/http" "os" "os/signal" @@ -11,7 +13,7 @@ import ( "git.xenrox.net/~xenrox/10man-api/database" "git.xenrox.net/~xenrox/10man-api/graph" "git.xenrox.net/~xenrox/10man-api/graph/generated" - "git.xenrox.net/~xenrox/go-log" + "git.xenrox.net/~xenrox/go-utils/logging" "github.com/99designs/gqlgen/graphql/handler" "github.com/99designs/gqlgen/graphql/playground" ) @@ -24,20 +26,25 @@ func main() { sigs := make(chan os.Signal, 1) signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) - logger := log.NewDefaultLogger() - cfg, err := config.ReadConfig(configPath) if err != nil { - logger.Fatalf("config: %v", err) + slog.Error("Failed to read config", + slog.String("error", err.Error())) + os.Exit(1) } - if err := logger.SetLevelFromString(cfg.LogLevel); err != nil { - logger.Errorf("config: %v", err) + logger, err := logging.New(cfg.LogLevel, "text", os.Stderr) + if err != nil { + slog.Error("Failed to create logger", + slog.String("error", err.Error())) + os.Exit(1) } db, err := database.Open(cfg.DBConnectionString) if err != nil { - logger.Fatal(err) + logger.Error("Failed to open database connection", + slog.String("error", err.Error())) + os.Exit(1) } srv := handler.NewDefaultServer(generated.NewExecutableSchema(generated.Config{ @@ -50,20 +57,26 @@ func main() { if cfg.EnablePlayground { http.Handle("/", playground.Handler("GraphQL playground", "/query")) - logger.Infof("connect to http://%s/ for GraphQL playground", cfg.HTTPAddress) + logger.Info(fmt.Sprintf("connect to http://%s/ for GraphQL playground", cfg.HTTPAddress)) } http.Handle("/query", srv) go func() { - logger.Fatal(http.ListenAndServe(cfg.HTTPAddress, nil)) + err = http.ListenAndServe(cfg.HTTPAddress, nil) + if err != nil { + logger.Error("Failed to start HTTP server", + slog.String("error", err.Error())) + os.Exit(1) + } }() shutdown(<-sigs, db, logger) } -func shutdown(sig os.Signal, db *database.DB, logger *log.Logger) { +func shutdown(sig os.Signal, db *database.DB, logger *slog.Logger) { + logger.Info("Shutting down") if err := db.DB.Close(); err != nil { - logger.Fatalf("shutdown: %v", err) + logger.Error("Failed to close database connection", + slog.String("error", err.Error())) } - logger.Info("API was shut down") } -- 2.44.0