package main import ( "log" "nf" "time" ) func Logger() nf.HandlerFunc { return func(c *nf.Ctx) error { // Start timer t := time.Now() // Process request err := c.Next() // Calculate resolution time log.Printf("[%d] %s in %v", c.StatusCode, c.Request.RequestURI, time.Since(t)) return err } } func NewRecovery() nf.HandlerFunc { return func(c *nf.Ctx) error { defer func() { if err := recover(); err != nil { log.Printf("[recovery] %v", err) } }() return c.Next() } }