package main import ( "log" "net/http" "os" "time" ) // Logger interface type Logger interface { Println(v ...interface{}) Printf(format string, v ...interface{}) } // LoggerHandler interface type LoggerHandler interface { Logger ServeHTTP(http.ResponseWriter, *http.Request, http.HandlerFunc) } // NewLogger returns a logger interface func NewLogger() LoggerHandler { return &logger{log.New(os.Stdout, appLabel, log.Ldate|log.Lmicroseconds)} } type logger struct { Logger } func (l *logger) ServeHTTP(rw http.ResponseWriter, r *http.Request, next http.HandlerFunc) { start := time.Now() next(rw, r) l.Printf("Completed %s to %s in %v", r.Method, r.URL.Path, time.Since(start)) }