PHP
·
发表于 5年以前
·
阅读量:8283
package main
import "net/http"
import "time"
import "fmt"
func runLogging(logs chan string) {
for log := range logs {
fmt.Println(log)
}
}
func wrapLogging(f http.HandlerFunc) http.HandlerFunc {
logs := make(chan string, 10000)
go runLogging(logs)
return func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
f(w, r)
method := r.Method
path := r.URL.Path
elapsed := float64(time.Since(start)) / 1000000.0
logs <- fmt.Sprintf(
"method=%s path=%s elapsed=%f",
method, path, elapsed)
}
}
func hello(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain")
time.Sleep(time.Millisecond * 50)
fmt.Fprintln(w, "Hello logged world")
}
func main() {
handler := wrapLogging(hello)
http.HandleFunc("/", handler)
http.ListenAndServe(":5000", nil)
}