diff options
| -rw-r--r-- | cmd/server/main.go | 65 | ||||
| -rw-r--r-- | go.mod | 1 | ||||
| -rw-r--r-- | go.sum | 2 |
3 files changed, 41 insertions, 27 deletions
diff --git a/cmd/server/main.go b/cmd/server/main.go index a3a06a0..6b6d04b 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -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 +} @@ -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 ) @@ -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= |
