💼 add locals to logger

Co-Authored-By: Rafael Cossovan <navossoc@gmail.com>
pull/976/head
Fenny 2020-10-28 03:54:40 +01:00
parent a90ebb7098
commit 17b6597ec8
3 changed files with 60 additions and 2 deletions

View File

@ -103,6 +103,7 @@ const (
TagQuery = "query:"
TagForm = "form:"
TagCookie = "cookie:"
TagLocals = "locals:"
TagBlack = "black"
TagRed = "red"
TagGreen = "green"

View File

@ -79,6 +79,7 @@ const (
TagRoute = "route"
TagError = "error"
TagHeader = "header:"
TagLocals = "locals:"
TagQuery = "query:"
TagForm = "form:"
TagCookie = "cookie:"
@ -332,6 +333,17 @@ func New(config ...Config) fiber.Handler {
return buf.WriteString(c.FormValue(tag[5:]))
case strings.HasPrefix(tag, TagCookie):
return buf.WriteString(c.Cookies(tag[7:]))
case strings.HasPrefix(tag, TagLocals):
switch v := c.Locals(tag[7:]).(type) {
case []byte:
return buf.Write(v)
case string:
return buf.WriteString(v)
case nil:
return 0, nil
default:
return buf.WriteString(fmt.Sprintf("%v", v))
}
}
}
return 0, nil

View File

@ -36,6 +36,52 @@ func Test_Logger(t *testing.T) {
utils.AssertEqual(t, "some random error", buf.String())
}
// go test -run Test_Logger_locals
func Test_Logger_locals(t *testing.T) {
app := fiber.New()
buf := bytebufferpool.Get()
defer bytebufferpool.Put(buf)
app.Use(New(Config{
Format: "${locals:demo}",
Output: buf,
}))
app.Get("/", func(c *fiber.Ctx) error {
c.Locals("demo", "johndoe")
return c.SendStatus(fiber.StatusOK)
})
app.Get("/int", func(c *fiber.Ctx) error {
c.Locals("demo", 55)
return c.SendStatus(fiber.StatusOK)
})
app.Get("/empty", func(c *fiber.Ctx) error {
return c.SendStatus(fiber.StatusOK)
})
resp, err := app.Test(httptest.NewRequest("GET", "/", nil))
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode)
utils.AssertEqual(t, "johndoe", buf.String())
buf.Reset()
resp, err = app.Test(httptest.NewRequest("GET", "/int", nil))
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode)
utils.AssertEqual(t, "55", buf.String())
buf.Reset()
resp, err = app.Test(httptest.NewRequest("GET", "/empty", nil))
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode)
utils.AssertEqual(t, "", buf.String())
}
// go test -run Test_Logger_Next
func Test_Logger_Next(t *testing.T) {
app := fiber.New()
@ -130,10 +176,9 @@ func Benchmark_Logger(b *testing.B) {
app := fiber.New()
app.Use(New(Config{
Format: "${bytesReceived} ${bytesSent} ${status}",
Format: "${path}",
Output: ioutil.Discard,
}))
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World!")
})