func NewCustomMiddleware(level logrus.Level, formatter logrus.Formatter, name string) *Middleware {
	log := logrus.New()
	log.Level = level
	log.Formatter = formatter
	return &Middleware{
		Logger: log,
		Name:   name,
		Before: DefaultBefore,
		After:  DefaultAfter,
		logStarting: true,
		clock:       &realClock{},
	}
}
NewCustomMiddleware builds a *Middleware with the given level and formatter
package negronilogrus
import (
	"fmt"
	"net/http"
	"net/url"
	"time"
	"github.com/sirupsen/logrus"
	"github.com/urfave/negroni"
)
type timer interface {
	Now() time.Time
	Since(time.Time) time.Duration
}
type realClock struct{}
func (rc *realClock) Now() time.Time {
	return time.Now()
}
func (rc *realClock) Since(t time.Time) time.Duration {
	return time.Since(t)
}
type Middleware struct {
	Logger *logrus.Logger
	Name   string
	Before func(*logrus.Entry, *http.Request, string) *logrus.Entry
	After  func(*logrus.Entry, negroni.ResponseWriter, time.Duration, string) *logrus.Entry
	logStarting bool
	clock timer
	excludeURLs []string
}
func NewMiddleware() *Middleware {
	return NewCustomMiddleware(logrus.InfoLevel, &logrus.TextFormatter{}, "web")
}