1
0
Fork 0
mirror of https://github.com/Luzifer/mondash.git synced 2024-11-10 00:20:02 +00:00

Write access-log

This commit is contained in:
Knut Ahlers 2015-07-06 22:48:54 +02:00
parent b9e5281a87
commit a3a148b0ff
2 changed files with 54 additions and 1 deletions

40
logResponseWriter.go Normal file
View file

@ -0,0 +1,40 @@
package main
import "net/http"
// LogResponseWriter wraps the standard http.ResponseWritter allowing for more
// verbose logging
type LogResponseWriter struct {
Status int
Size int
http.ResponseWriter
}
// NewLogResponseWriter instanciates a new LogResponseWriter
func NewLogResponseWriter(res http.ResponseWriter) *LogResponseWriter {
// Default the status code to 200
return &LogResponseWriter{200, 0, res}
}
// Header returns & satisfies the http.ResponseWriter interface
func (w *LogResponseWriter) Header() http.Header {
return w.ResponseWriter.Header()
}
// Write satisfies the http.ResponseWriter interface and
// captures data written, in bytes
func (w *LogResponseWriter) Write(data []byte) (int, error) {
written, err := w.ResponseWriter.Write(data)
w.Size += written
return written, err
}
// WriteHeader satisfies the http.ResponseWriter interface and
// allows us to cach the status code
func (w *LogResponseWriter) WriteHeader(statusCode int) {
w.Status = statusCode
w.ResponseWriter.WriteHeader(statusCode)
}

15
main.go
View file

@ -4,6 +4,7 @@ import (
"crypto/md5" "crypto/md5"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"log"
"net/http" "net/http"
"time" "time"
@ -49,10 +50,22 @@ func main() {
go runWelcomePage(cfg) go runWelcomePage(cfg)
http.Handle("/", r) http.Handle("/", logHTTPRequest(r))
http.ListenAndServe(cfg.Listen, nil) http.ListenAndServe(cfg.Listen, nil)
} }
func logHTTPRequest(h http.Handler) http.Handler {
return http.HandlerFunc(func(res http.ResponseWriter, r *http.Request) {
start := time.Now().UnixNano()
w := NewLogResponseWriter(res)
h.ServeHTTP(w, r)
d := (time.Now().UnixNano() - start) / 1000
log.Printf("%s %s %d %dµs %dB\n", r.Method, r.URL.Path, w.Status, d, w.Size)
})
}
func generateAPIKey() string { func generateAPIKey() string {
t := time.Now().String() t := time.Now().String()
sum := md5.Sum([]byte(t)) sum := md5.Sum([]byte(t))