package main import ( "context" "log/slog" "net/http" "os" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" ) func main() { if err := prepareDirectories(); err != nil { slog.Error("failed to prepare directories", "error", err) os.Exit(1) } e := echo.New() e.Use(middleware.RequestLoggerWithConfig(middleware.RequestLoggerConfig{ LogStatus: true, LogURI: true, LogMethod: true, LogLatency: true, LogError: true, HandleError: true, LogValuesFunc: func(_ echo.Context, v middleware.RequestLoggerValues) error { attrs := []slog.Attr{ slog.String("method", v.Method), slog.String("uri", v.URI), slog.Int("status", v.Status), slog.Duration("latency", v.Latency), } if v.Error != nil { attrs = append(attrs, slog.String("error", v.Error.Error())) } slog.LogAttrs(context.Background(), slog.LevelInfo, "request", attrs...) return nil }, })) e.Use(middleware.Recover()) e.POST("/exec", handleExec) if err := e.Start(":80"); err != http.ErrServerClosed { slog.Error("failed to start server", "error", err) os.Exit(1) } }