func Classic() *negroni.Negroni {
	n := negroni.New()
	n.Use(middleware.NewRecovery())
	n.Use(middleware.NewTraceID())
	logViper := viper.Sub("log")
	n.Use(middleware.NewRealIP())
	n.Use(middleware.NewLogger(logViper.GetString("level"), logViper.GetString("file")))
	n.Use(middleware.NewCloseNotify())
	n.Use(middleware.NewTimeout(viper.GetDuration("middleware.timeout")))
	n.Use(middleware.NewParseForm())
	return n
}
Classic returns a new Negroni instance with the default middleware already
in the stack.

Recovery - Panic Recovery Middleware
Logger - Request/Response Logging
TraceID - Trace ID Middleware
RealIP - Get Real Client IP
CloseNotify - Notify Client Close
Timeout - Stop Process When Timeout
package doggy
import (
	"fmt"
	"net/http"
	"github.com/gorilla/mux"
	"github.com/hnlq715/doggy/middleware"
	"github.com/julienschmidt/httprouter"
	"github.com/spf13/viper"
	"github.com/urfave/negroni"
)
func New(handlers ...negroni.Handler) *negroni.Negroni {
	return negroni.New()
}