package main import ( "flag" "net/http" "os" "github.com/rs/zerolog" "github.com/rs/zerolog/log" "code.severnaya.net/kordophone-mock/v2/prompt" "code.severnaya.net/kordophone-mock/v2/web" ) type LoggingHook struct { prompt *prompt.Prompt } func (t *LoggingHook) Run(e *zerolog.Event, level zerolog.Level, message string) { t.prompt.CleanAndRefreshForLogging() } func setupLogging() { debug := flag.Bool("debug", false, "enable debug logging") flag.Parse() // Pretty logging log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) // Default level for this example is info, unless debug flag is present zerolog.SetGlobalLevel(zerolog.InfoLevel) if *debug { zerolog.SetGlobalLevel(zerolog.DebugLevel) } } func main() { setupLogging() c := web.MockHTTPServerConfiguration{ AuthEnabled: false, } addr := ":5738" s := web.NewMockHTTPServer(c) httpServer := &http.Server{ Addr: addr, Handler: s, } // Populate with test data s.Server.PopulateWithTestData() log.Info().Msgf("Generated test data. %d conversations", len(s.Server.Conversations())) log.Info().Msgf("Listening on %s", addr) go httpServer.ListenAndServe() rl := prompt.NewPrompt(&s.Server) // Hook logging so we can refresh the prompt when something is logged. log.Logger = log.Logger.Hook(&LoggingHook{prompt: rl}) // Read indefinitely err := rl.StartInteractive() if err != nil { log.Error().Err(err) } }