iris/middleware/logger/logger.go

101 lines
2.1 KiB
Go
Raw Normal View History

2016-05-30 16:08:09 +02:00
package logger
import (
2016-05-31 10:05:42 +02:00
"strconv"
"time"
2016-05-30 16:08:09 +02:00
"github.com/kataras/iris"
"github.com/kataras/iris/config"
"github.com/kataras/iris/logger"
)
// Options are the options of the logger middlweare
// contains 5 bools
// Status, IP, Method, Path, EnableColors
2016-05-30 16:08:09 +02:00
// if set to true then these will print
type Options struct {
2016-05-31 10:05:42 +02:00
// Status displays status code (bool)
Status bool
// IP displays request's remote address (bool)
IP bool
// Method displays the http method (bool)
Method bool
// Path displays the request path (bool)
Path bool
// EnableColors defaults to false
EnableColors bool
2016-05-30 16:08:09 +02:00
}
// DefaultOptions returns an options which all properties are true
func DefaultOptions() Options {
return Options{true, true, true, true, false}
2016-05-30 16:08:09 +02:00
}
type loggerMiddleware struct {
*logger.Logger
options Options
}
2016-05-31 10:05:42 +02:00
// Serve serves the middleware
2016-05-30 16:08:09 +02:00
func (l *loggerMiddleware) Serve(ctx *iris.Context) {
//all except latency to string
var date, status, ip, method, path string
var latency time.Duration
var startTime, endTime time.Time
path = ctx.PathString()
method = ctx.MethodString()
startTime = time.Now()
2016-05-30 16:08:09 +02:00
ctx.Next()
//no time.Since in order to format it well after
endTime = time.Now()
date = endTime.Format("01/02 - 15:04:05")
latency = endTime.Sub(startTime)
2016-05-30 16:08:09 +02:00
if l.options.Status {
status = strconv.Itoa(ctx.Response.StatusCode())
}
if l.options.IP {
ip = ctx.RemoteAddr()
}
if !l.options.Method {
method = ""
}
if !l.options.Path {
path = ""
}
//finally print the logs
l.printf("%s %v %4v %s %s %s \n", date, status, latency, ip, method, path)
}
func (l *loggerMiddleware) printf(format string, a ...interface{}) {
if l.options.EnableColors {
l.Logger.Otherf(format, a...)
2016-05-30 16:08:09 +02:00
} else {
l.Logger.Printf(format, a...)
2016-05-30 16:08:09 +02:00
}
}
2016-06-18 00:11:03 +02:00
// New returns the logger middleware as HandlerFunc with the default settings if second parameter is not passed
func New(theLogger *logger.Logger, options ...Options) iris.HandlerFunc {
if theLogger == nil {
theLogger = logger.New(config.DefaultLogger())
}
2016-05-30 16:08:09 +02:00
l := &loggerMiddleware{Logger: theLogger}
2016-05-30 16:08:09 +02:00
if len(options) > 0 {
l.options = options[0]
} else {
l.options = DefaultOptions()
}
return l.Serve
2016-05-30 16:08:09 +02:00
}