57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httputil"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
var logFile *string
|
|
|
|
func main() {
|
|
logFile = flag.String("logfile", "requests.log", "the file to log requests to")
|
|
flag.Parse()
|
|
|
|
http.HandleFunc("/", post)
|
|
err := http.ListenAndServe(":3000", nil)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func post(w http.ResponseWriter, r *http.Request) {
|
|
reqDump, err := httputil.DumpRequest(r, true)
|
|
if err != nil {
|
|
w.WriteHeader(500)
|
|
w.Write([]byte(err.Error()))
|
|
return
|
|
}
|
|
// log to stdout
|
|
fmt.Print(logString(reqDump))
|
|
|
|
// log to logfile
|
|
lf, err := os.OpenFile(*logFile, os.O_CREATE | os.O_APPEND | os.O_WRONLY, 0644)
|
|
if err != nil {
|
|
fmt.Printf("failed to open log file: %v", err)
|
|
w.WriteHeader(500)
|
|
w.Write([]byte(fmt.Sprintf("failed to open log file: %v", err)))
|
|
}
|
|
defer lf.Close()
|
|
lf.WriteString(logString(reqDump))
|
|
|
|
// echo log message as response
|
|
w.WriteHeader(200)
|
|
w.Write([]byte(logString(reqDump)))
|
|
}
|
|
|
|
func logString(reqDump []byte) string {
|
|
var sb strings.Builder
|
|
sb.WriteString(fmt.Sprintf("Received request at %v:\n\n", time.Now()))
|
|
sb.Write(reqDump)
|
|
sb.WriteString("\n\n")
|
|
return sb.String()
|
|
} |