From c88402491bee65c7a08c3312fab3b28a2cfe719a Mon Sep 17 00:00:00 2001 From: Pierre-Yves Aillet Date: Sun, 13 Feb 2022 15:50:07 +0100 Subject: [PATCH] add access logs --- README.md | 15 ++++++++------- app.go | 37 ++++++++++++++++++++++++++----------- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 9b4d2ce..1ab43d8 100644 --- a/README.md +++ b/README.md @@ -43,13 +43,14 @@ Heath check. ### Flags -| Flag | Env var | Description | -|----------|----------------------|-----------------------------------------| -| `cert` | | give me a certificate. | -| `key` | | give me a key. | -| `cacert` | | give me a CA chain, enforces mutual TLS | -| `port` | `WHOAMI_PORT_NUMBER` | give me a port number. (default: `80`) | -| `name` | `WHOAMI_NAME` | give me a name. | +| Flag | Env var | Description | +|-----------|----------------------|-----------------------------------------| +| `cert` | | Give me a certificate. | +| `key` | | Give me a key. | +| `cacert` | | Give me a CA chain, enforces mutual TLS | +| `port` | `WHOAMI_PORT_NUMBER` | Give me a port number. (default: `80`) | +| `name` | `WHOAMI_NAME` | Give me a name. | +| `verbose` | | Enable verbose logging. | ## Examples diff --git a/app.go b/app.go index 8159116..36665c3 100644 --- a/app.go +++ b/app.go @@ -32,14 +32,16 @@ const ( ) var ( - cert string - key string - ca string - port string - name string + cert string + key string + ca string + port string + name string + verbose bool ) func init() { + flag.BoolVar(&verbose, "verbose", false, "Enable verbose logging") flag.StringVar(&cert, "cert", "", "give me a certificate") flag.StringVar(&key, "key", "", "give me a key") flag.StringVar(&ca, "cacert", "", "give me a CA chain, enforces mutual TLS") @@ -56,12 +58,12 @@ func main() { flag.Parse() mux := http.NewServeMux() - mux.HandleFunc("/data", dataHandler) - mux.HandleFunc("/echo", echoHandler) - mux.HandleFunc("/bench", benchHandler) - mux.HandleFunc("/", whoamiHandler) - mux.HandleFunc("/api", apiHandler) - mux.HandleFunc("/health", healthHandler) + mux.Handle("/data", handle(dataHandler, verbose)) + mux.Handle("/echo", handle(echoHandler, verbose)) + mux.Handle("/bench", handle(benchHandler, verbose)) + mux.Handle("/api", handle(apiHandler, verbose)) + mux.Handle("/health", handle(healthHandler, verbose)) + mux.Handle("/", handle(whoamiHandler, verbose)) if cert == "" || key == "" { log.Printf("Starting up on port %s", port) @@ -102,6 +104,19 @@ func setupMutualTLS(ca string) *tls.Config { return tlsConfig } +func handle(next http.HandlerFunc, verbose bool) http.Handler { + if !verbose { + return next + } + + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + next(w, r) + + // - [] " " - + log.Printf("%s - - [%s] \"%s %s %s\" - -", r.RemoteAddr, time.Now().Format("02/Jan/2006:15:04:05 -0700"), r.Method, r.URL.Path, r.Proto) + }) +} + func benchHandler(w http.ResponseWriter, _ *http.Request) { w.Header().Set("Connection", "keep-alive") w.Header().Set("Content-Type", "text/plain")