package main import ( "converter/internal/app" "converter/internal/config" "fmt" "log/slog" "os" "os/signal" "syscall" ) const ( envlocal = "local" envdev = "dev" envprod = "prod" ) func main() { cfg := config.MustLoad() fmt.Println(cfg) log := setupLogger(cfg.Env) log.Info("starting application", slog.Any("cfg", cfg)) applicaton := app.New(log, cfg.GRPC.Port) go applicaton.GRPCSrv.MustRun() stop := make(chan os.Signal, 1) signal.Notify(stop, syscall.SIGTERM, syscall.SIGINT) sign := <-stop log.Info("stoping application", slog.String("signal", sign.String())) applicaton.GRPCSrv.Stop() log.Info("application stopped") } func setupLogger(env string) *slog.Logger { var log *slog.Logger switch env { case envlocal: log = slog.New( slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelInfo}), ) 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 }