Revert "reduce complexity in logger"

This reverts commit d410a888
pull/466/head
wernerr 2020-06-12 13:30:38 +02:00
parent f4292c9030
commit 1857803048
1 changed files with 57 additions and 82 deletions

View File

@ -106,11 +106,11 @@ func Logger(format ...string) fiber.Handler {
return LoggerWithConfig(config)
}
// LoggerWithConfig allows you to pass an CompressConfig
func LoggerWithConfig(config LoggerConfig) fiber.Handler {
// Middleware settings
var mutex sync.RWMutex
// LoggerWithConfig allows you to pass an CompressConfig
func LoggerWithConfig(config LoggerConfig) fiber.Handler {
var tmpl loggerTemplate
tmpl.new(config.Format, "${", "}")
@ -141,30 +141,28 @@ func LoggerWithConfig(config LoggerConfig) fiber.Handler {
stop := time.Now()
// Get new buffer
buf := bytebufferpool.Get()
_, err := tmpl.executeFunc(buf, tmplFn(buf, c, timestamp, start, stop))
if err != nil {
_, _ = buf.WriteString(err.Error())
}
if _, err := config.Output.Write(buf.Bytes()); err != nil {
fmt.Println(err)
}
bytebufferpool.Put(buf)
}
}
type tmplRenderer = func(w io.Writer, tag string) (int, error)
func tmplFn(buf *bytebufferpool.ByteBuffer, c *fiber.Ctx, timestamp string, start, stop time.Time) tmplRenderer {
return func(w io.Writer, tag string) (int, error) {
_, err := tmpl.executeFunc(buf, func(w io.Writer, tag string) (int, error) {
switch tag {
case LoggerTagTime:
mutex.RLock()
defer mutex.RUnlock()
return buf.WriteString(timestamp)
case LoggerTagReferer:
return buf.WriteString(c.Get(fiber.HeaderReferer))
case LoggerTagProtocol:
return buf.WriteString(c.Protocol())
case LoggerTagIP:
return buf.WriteString(c.IP())
case LoggerTagIPs:
return buf.WriteString(c.Get(fiber.HeaderXForwardedFor))
case LoggerTagHost:
return buf.WriteString(c.Hostname())
case LoggerTagMethod:
return buf.WriteString(c.Method())
case LoggerTagPath:
return buf.WriteString(c.Path())
case LoggerTagURL:
return buf.WriteString(c.OriginalURL())
case LoggerTagUA:
return buf.WriteString(c.Get(fiber.HeaderUserAgent))
case LoggerTagLatency:
@ -177,46 +175,13 @@ func tmplFn(buf *bytebufferpool.ByteBuffer, c *fiber.Ctx, timestamp string, star
return buf.WriteString(strconv.Itoa(len(c.Fasthttp.Request.Body())))
case LoggerTagBytesSent:
return buf.WriteString(strconv.Itoa(len(c.Fasthttp.Response.Body())))
case LoggerTagError:
return writeErrorTag(buf, c)
}
if writeCount, err := writeLocationInformation(buf, c, tag); writeCount != 0 || err != nil {
return writeCount, err
}
return writeTagPrefix(buf, c, tag)
}
}
func writeLocationInformation(buf *bytebufferpool.ByteBuffer, c *fiber.Ctx, tag string) (int, error) {
switch tag {
case LoggerTagReferer:
return buf.WriteString(c.Get(fiber.HeaderReferer))
case LoggerTagProtocol:
return buf.WriteString(c.Protocol())
case LoggerTagHost:
return buf.WriteString(c.Hostname())
case LoggerTagMethod:
return buf.WriteString(c.Method())
case LoggerTagPath:
return buf.WriteString(c.Path())
case LoggerTagURL:
return buf.WriteString(c.OriginalURL())
case LoggerTagRoute:
return buf.WriteString(c.Route().Path)
}
return 0, nil
}
func writeErrorTag(buf *bytebufferpool.ByteBuffer, c *fiber.Ctx) (int, error) {
if c.Error() == nil {
return 0, nil
}
case LoggerTagError:
if c.Error() != nil {
return buf.WriteString(c.Error().Error())
}
func writeTagPrefix(buf *bytebufferpool.ByteBuffer, c *fiber.Ctx, tag string) (int, error) {
default:
switch {
case strings.HasPrefix(tag, LoggerTagHeader):
return buf.WriteString(c.Get(tag[7:]))
@ -227,7 +192,17 @@ func writeTagPrefix(buf *bytebufferpool.ByteBuffer, c *fiber.Ctx, tag string) (i
case strings.HasPrefix(tag, LoggerTagCookie):
return buf.WriteString(c.Cookies(tag[7:]))
}
}
return 0, nil
})
if err != nil {
_, _ = buf.WriteString(err.Error())
}
if _, err := config.Output.Write(buf.Bytes()); err != nil {
fmt.Println(err)
}
bytebufferpool.Put(buf)
}
}
// MIT License fasttemplate