Replaced log with slog, preparing to migrate all logs to slog

This commit is contained in:
2025-07-03 19:34:52 +03:00
parent eb219cab1a
commit 635db98044
3 changed files with 41 additions and 27 deletions

View File

@@ -3,49 +3,29 @@ package main
import (
"context"
"flag"
"fmt"
"io"
"log"
"log/slog"
"os"
"os/signal"
"path/filepath"
"syscall"
"time"
"github.com/kyren223/eko/internal/server"
"github.com/kyren223/eko/internal/server/api"
"github.com/kyren223/eko/pkg/assert"
"gopkg.in/natefinch/lumberjack.v2"
)
const port = 7223
var prod = true
func main() {
stdout := flag.Bool("stdout", false, "enable logging to stdout")
prodFlag := flag.Bool("prod", true, "true for production mode, false for dev mode")
flag.Parse()
prod = !(*prodFlag)
logDir := os.Getenv("EKO_SERVER_LOG_DIR")
if logDir == "" {
logDir = "logs"
}
err := os.MkdirAll(logDir, 0750)
if err != nil {
log.Fatalln(err)
}
logPath := fmt.Sprintf("eko-server-%s.log", time.Now().Format("2006-01-02_15-04-05"))
logPath = filepath.Join(logDir, logPath)
logFile, err := os.OpenFile(logPath, os.O_APPEND|os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0600) // #nosec G304
if err != nil {
log.Fatalln(err)
}
defer logFile.Close()
assert.AddFlush(logFile)
if *stdout {
log.SetOutput(io.MultiWriter(logFile, os.Stdout))
} else {
log.SetOutput(logFile)
}
setupLogging()
api.ConnectToDatabase()
assert.AddFlush(api.DB())
@@ -53,6 +33,7 @@ func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
go func() {
@@ -66,3 +47,33 @@ func main() {
log.Println(err)
}
}
func setupLogging() {
logDir := os.Getenv("EKO_SERVER_LOG_DIR")
if logDir == "" {
logDir = "logs"
}
err := os.MkdirAll(logDir, 0750)
if err != nil {
log.Fatalln(err)
}
rotator := &lumberjack.Logger{
Filename: filepath.Join(logDir, "server.log"),
MaxSize: 1, // megabytes TODO: switch this to a more reasonable size (100?)
MaxAge: 28, // days
}
level := slog.LevelDebug
if prod {
level = slog.LevelInfo
}
handler := slog.NewJSONHandler(rotator, &slog.HandlerOptions{
AddSource: true,
Level: level,
})
logger := slog.New(handler)
slog.SetDefault(logger)
slog.SetLogLoggerLevel(level) // TODO: remove me after fully migrating to slog
}

1
go.mod
View File

@@ -41,5 +41,6 @@ require (
golang.org/x/sync v0.10.0 // indirect
golang.org/x/sys v0.29.0 // indirect
golang.org/x/text v0.21.0 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1
gopkg.in/yaml.v3 v3.0.1 // indirect
)

2
go.sum
View File

@@ -81,6 +81,8 @@ golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 h1:5D53IMaUuA5InSeMu9eJtlQXS2NxAhyWQvkKEgXZhHI=