package main import ( "context" "io" "log/slog" "os" "path/filepath" "git.systemact.nl/henk/mars-terraform-registry/internal/config" "git.systemact.nl/henk/mars-terraform-registry/internal/server" "gopkg.in/natefinch/lumberjack.v2" ) func main() { homeDir, err := os.UserHomeDir() if err != nil { panic("Can't determine home directory") } appDir := filepath.Join(homeDir, ".local", "share", "mars_terraform_registry") logFilePath := filepath.Join(appDir, "logs") if err := os.MkdirAll(logFilePath, 0755); err != nil { panic("Can't create log directory") } // Create Lumberjack rolling logger (replaces *os.File) logFile := &lumberjack.Logger{ Filename: logFilePath, MaxSize: 10, // MB: size at which to rotate MaxAge: 30, // Days: how long to keep old logs MaxBackups: 5, // Number of old logs to keep Compress: true, // .gz compression for old logs LocalTime: true, // Local time instead of UTC in filenames } defer logFile.Close() multiWriter := io.MultiWriter(os.Stdout, logFile) logOptions := slog.HandlerOptions{ Level: slog.LevelDebug, } slog.SetDefault(slog.New(slog.NewJSONHandler(multiWriter, &logOptions))) slog.Info("Logging test") yamlConfigLoader := &config.YamlConfigLoader{FilePath: filepath.Join(appDir, "config", "config.yaml")} cfg, err := yamlConfigLoader.LoadConfig() if err != nil { slog.Error("Failed to load config", slog.Any("error", err)) panic("Failed to load config") } slog.Info("Config loaded", slog.Any("config", cfg)) server, err := server.NewServer(cfg) if err != nil { slog.Error("Failed to create server", "error", err) os.Exit(1) } if err := server.Run(context.Background()); err != nil { slog.Error("Server error", "error", err) os.Exit(1) } }