diff options
Diffstat (limited to 'cmd/server')
| -rw-r--r-- | cmd/server/main.go | 65 |
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 +} |
