summaryrefslogtreecommitdiff
path: root/cmd/server/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/server/main.go')
-rw-r--r--cmd/server/main.go65
1 files changed, 38 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
+}