package app import ( "fmt" "io" "log/slog" "os" "strings" "time" ) var ( logFile *os.File ) func newLogger(environment string) { if err := os.MkdirAll("logs", 0755); err != nil { fmt.Println("error creating logs directory:", err) return } now := time.Now().Format("2006-01-02") f, err := os.OpenFile(fmt.Sprintf("logs/log%s.log", now), os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) if err != nil { fmt.Println("error opening log file:", err) return } var level slog.Level var addSource bool switch strings.ToLower(environment) { case "dev": level = slog.LevelDebug // -4 addSource = true case "prod": level = slog.LevelInfo // 0 addSource = false default: level = slog.LevelInfo addSource = false } mw := io.MultiWriter(os.Stdout, f) logger := slog.New(slog.NewTextHandler(mw, &slog.HandlerOptions{ AddSource: addSource, Level: level, })) if logFile != nil { logFile.Close() } logFile = f slog.SetDefault(logger) } func startRotativeLogger(environment string) { newLogger(environment) ticker := time.NewTicker(time.Hour * 24) go func() { for range ticker.C { newLogger(environment) } }() }