ideas, better logging

This commit is contained in:
Mark McGranaghan
2012-09-20 09:59:32 -07:00
parent 8e209cd6ab
commit 44ad627f6c
4 changed files with 34 additions and 22 deletions

View File

@@ -15,3 +15,7 @@ func main() {
os.Setenv("FOO", "bar")
fmt.Println(os.Getenv("FOO"))
}
// == todo
// ensure pattern
// link to 12 factor

View File

@@ -16,6 +16,7 @@ func wrapCanonicalHost(f http.HandlerFunc, canonicalHost string) http.HandlerFun
hostPort[0] = canonicalHost
url := "http://" + strings.Join(hostPort, ":") + req.URL.String()
http.Redirect(res, req, url, 301)
return
}
f(res, req)
}

View File

@@ -2,34 +2,33 @@ package main
import ("net/http"; "fmt"; "time")
func hello(res http.ResponseWriter, req *http.Request) {
res.Header().Set("Content-Type", "text/plain")
time.Sleep(time.Millisecond * 50)
fmt.Fprintln(res, "Hello logged world")
}
func wrapLogging(f http.HandlerFunc, logs chan string) http.HandlerFunc {
return func(res http.ResponseWriter, req *http.Request) {
start := time.Now()
f(res, req)
method := req.Method
path := req.URL.Path
elapsed := float64(time.Since(start)) / 1000000.0
logs <- fmt.Sprintf("method=%s path=%s elapsed=%f", method, path, elapsed)
}
}
func runLogging(logs chan string) {
for log := range logs {
fmt.Println(log)
}
}
func main() {
func wrapLogging(f http.HandlerFunc, logs chan string) http.HandlerFunc {
logs := make(chan string, 10000)
go runLogging(logs)
handler := wrapLogging(hello, logs)
return func(res http.ResponseWriter, req *http.Request) {
start := time.Now()
f(res, req)
method := req.Method
path := req.URL.Path
elapsed := float64(time.Since(start)) / 1000000.0
logs <- fmt.Sprintf("method=%s path=%s elapsed=%f", method, path, elapsed)
}
}
func hello(res http.ResponseWriter, req *http.Request) {
res.Header().Set("Content-Type", "text/plain")
time.Sleep(time.Millisecond * 50)
fmt.Fprintln(res, "Hello logged world")
}
func main() {
handler := wrapLogging(hello)
http.HandleFunc("/", handler)
http.ListenAndServe(":5000", nil)
}