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