mirror of https://github.com/gofiber/fiber.git
parent
f4292c9030
commit
1857803048
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue