github.com/billybanfield/evergreen@v0.0.0-20170525200750-eeee692790f7/apimodels/access_log.go (about) 1 package apimodels 2 3 import ( 4 "fmt" 5 "net/http" 6 "time" 7 ) 8 9 type MyWriter struct { 10 under http.ResponseWriter 11 code int 12 } 13 14 func (self *MyWriter) Header() http.Header { 15 return self.under.Header() 16 } 17 18 func (self *MyWriter) Write(data []byte) (int, error) { 19 return self.under.Write(data) 20 } 21 22 func (self *MyWriter) WriteHeader(code int) { 23 self.code = code 24 self.under.WriteHeader(code) 25 } 26 27 type AccessLogger struct { 28 router http.Handler 29 } 30 31 func NewAccessLogger(router http.Handler) *AccessLogger { 32 return &AccessLogger{router} 33 } 34 35 func (self *AccessLogger) ServeHTTP(w http.ResponseWriter, r *http.Request) { 36 startTime := time.Now() 37 myWriter := &MyWriter{w, 0} 38 39 self.router.ServeHTTP(myWriter, r) 40 41 var scheme string 42 if r.TLS == nil { 43 scheme = "http" 44 } else { 45 scheme = "https" 46 } 47 fmt.Printf("access: %v %v %v %v %v %v\n", time.Now(), r.RemoteAddr, r.URL, 48 myWriter.code, time.Since(startTime), scheme) 49 }