package main import ( "flag" "fmt" "net/http" "os" "os/signal" "go.jolheiser.com/invitea/router" "github.com/peterbourgon/ff/v3" "github.com/peterbourgon/ff/v3/fftoml" "github.com/rs/zerolog" "github.com/rs/zerolog/log" ) func main() { fs := flag.NewFlagSet("invitea", flag.ExitOnError) jsonLog := fs.Bool("json", false, "Enable JSON logging") port := fs.Int("port", 8080, "Port to run on") level := zerolog.InfoLevel fs.Func("level", "Logging level (debug, info, error)", func(s string) error { lvl, err := zerolog.ParseLevel(s) if err != nil { return err } level = lvl return nil }) if err := ff.Parse(fs, os.Args[1:], ff.WithEnvVarPrefix("INVITEA"), ff.WithConfigFileFlag("config"), ff.WithAllowMissingConfigFile(true), ff.WithConfigFileParser(fftoml.New().Parse), ); err != nil { log.Fatal().Err(err).Msg("") } zerolog.SetGlobalLevel(level) if !*jsonLog { log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) } r := router.New() go func() { log.Debug().Msgf("Listening at http://localhost:%d", *port) if err := http.ListenAndServe(fmt.Sprintf(":%d", *port), r); err != nil { log.Err(err).Msg("") } }() ch := make(chan os.Signal, 1) signal.Notify(ch, os.Interrupt, os.Kill) <-ch }