Skip to content

Commit 292a7d1

Browse files
committed
logger: Use Content-Length header for BytesReceived and BytesSent tags
1 parent c579a1a commit 292a7d1

File tree

2 files changed

+46
-9
lines changed

2 files changed

+46
-9
lines changed

middleware/logger/logger_test.go

+43-4
Original file line numberDiff line numberDiff line change
@@ -407,14 +407,40 @@ func Test_Response_Body(t *testing.T) {
407407
require.Equal(t, expectedGetResponse, buf.String())
408408

409409
buf.Reset() // Reset buffer to test POST
410-
411410
_, err = app.Test(httptest.NewRequest(fiber.MethodPost, "/test", nil))
412-
require.NoError(t, err)
413411

414412
expectedPostResponse := "Post in test"
413+
require.NoError(t, err)
415414
require.Equal(t, expectedPostResponse, buf.String())
416415
}
417416

417+
// go test -run Test_Request_Body
418+
func Test_Request_Body(t *testing.T) {
419+
t.Parallel()
420+
buf := bytebufferpool.Get()
421+
defer bytebufferpool.Put(buf)
422+
app := fiber.New()
423+
424+
app.Use(New(Config{
425+
Format: "${bytesReceived} ${bytesSent} ${status}",
426+
Output: buf,
427+
}))
428+
429+
app.Post("/", func(c fiber.Ctx) error {
430+
c.Response().Header.SetContentLength(5)
431+
return c.SendString("World")
432+
})
433+
434+
// Create a POST request with a body
435+
body := []byte("Hello")
436+
req := httptest.NewRequest(fiber.MethodPost, "/", bytes.NewReader(body))
437+
req.Header.Set("Content-Type", "application/octet-stream")
438+
439+
_, err := app.Test(req)
440+
require.NoError(t, err)
441+
require.Equal(t, "5 5 200", buf.String())
442+
}
443+
418444
// go test -run Test_Logger_AppendUint
419445
func Test_Logger_AppendUint(t *testing.T) {
420446
t.Parallel()
@@ -432,10 +458,21 @@ func Test_Logger_AppendUint(t *testing.T) {
432458
return c.SendString("hello")
433459
})
434460

461+
app.Get("/content", func(c fiber.Ctx) error {
462+
c.Response().Header.SetContentLength(5)
463+
return c.SendString("hello")
464+
})
465+
435466
resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/", nil))
436467
require.NoError(t, err)
437468
require.Equal(t, fiber.StatusOK, resp.StatusCode)
438-
require.Equal(t, "0 5 200", buf.String())
469+
require.Equal(t, "-2 0 200", buf.String())
470+
471+
buf.Reset()
472+
resp, err = app.Test(httptest.NewRequest(fiber.MethodGet, "/content", nil))
473+
require.NoError(t, err)
474+
require.Equal(t, fiber.StatusOK, resp.StatusCode)
475+
require.Equal(t, "-2 5 200", buf.String())
439476
}
440477

441478
// go test -run Test_Logger_Data_Race -race
@@ -618,7 +655,9 @@ func Test_Logger_ByteSent_Streaming(t *testing.T) {
618655
resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/", nil))
619656
require.NoError(t, err)
620657
require.Equal(t, fiber.StatusOK, resp.StatusCode)
621-
require.Equal(t, "0 0 200", buf.String())
658+
659+
// -2 means identity, -1 means chunked, 200 status
660+
require.Equal(t, "-2 -1 200", buf.String())
622661
}
623662

624663
type fakeOutput int

middleware/logger/tags.go

+3-5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package logger
22

33
import (
44
"fmt"
5+
"strconv"
56
"strings"
67

78
"github.com/gofiber/fiber/v3"
@@ -87,13 +88,10 @@ func createTagMap(cfg *Config) map[string]LogFunc {
8788
return output.Write(c.Body())
8889
},
8990
TagBytesReceived: func(output Buffer, c fiber.Ctx, _ *Data, _ string) (int, error) {
90-
return appendInt(output, len(c.Request().Body()))
91+
return output.WriteString(strconv.Itoa((c.Request().Header.ContentLength())))
9192
},
9293
TagBytesSent: func(output Buffer, c fiber.Ctx, _ *Data, _ string) (int, error) {
93-
if c.Response().Header.ContentLength() < 0 {
94-
return appendInt(output, 0)
95-
}
96-
return appendInt(output, len(c.Response().Body()))
94+
return output.WriteString(strconv.Itoa((c.Response().Header.ContentLength())))
9795
},
9896
TagRoute: func(output Buffer, c fiber.Ctx, _ *Data, _ string) (int, error) {
9997
return output.WriteString(c.Route().Path)

0 commit comments

Comments
 (0)