package main import ( "fmt" "log/slog" "os" "recipes/internal/config" prettyLogger "github.com/charmbracelet/log" ) const ( envLocal = "local" envDev = "dev" envProd = "prod" ) func main() { // load config cfg := config.MustLoad() // init logger log := setupLogger(cfg.Env) log.Info("starting application", slog.String("env", cfg.Env)) log.Debug("debug messages are enabled") log.Debug("Application config", slog.Any("config", fmt.Sprintf("%+v", *cfg))) // init storage // init app // graceful shutdown } func setupLogger(env string) *slog.Logger { var log *slog.Logger switch env { case envLocal: // log = slog.New( // slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelDebug}), // ) handler := prettyLogger.NewWithOptions(os.Stdout, prettyLogger.Options{Level: prettyLogger.DebugLevel}) log = slog.New(handler) case envDev: log = slog.New( slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelDebug}), ) case envProd: log = slog.New( slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelInfo}), ) } return log }