mirror of https://github.com/gofiber/fiber.git
feat(logger): Use predefined formats and fix default format
This commit updates the logger middleware to utilize the predefined log formats introduced in a previous commit. It also fixes the default format to use the `FormatDefault` constant. Changes: - Updated `config.go` to use `FormatDefault` constant for the default format. - Updated `default_logger.go` to use `FormatDefault` constant for the default format. - Added new test cases in `logger_test.go` to verify the "common", "combined" and "json" log formats. - Updated `format.go` to add newline character to the end of the default format.pull/3359/head
parent
c25ea013f2
commit
7e944894df
|
@ -116,7 +116,7 @@ var ConfigDefault = Config{
|
||||||
Next: nil,
|
Next: nil,
|
||||||
Skip: nil,
|
Skip: nil,
|
||||||
Done: nil,
|
Done: nil,
|
||||||
Format: defaultFormat,
|
Format: FormatDefault,
|
||||||
TimeFormat: "15:04:05",
|
TimeFormat: "15:04:05",
|
||||||
TimeZone: "Local",
|
TimeZone: "Local",
|
||||||
TimeInterval: 500 * time.Millisecond,
|
TimeInterval: 500 * time.Millisecond,
|
||||||
|
@ -126,9 +126,6 @@ var ConfigDefault = Config{
|
||||||
enableColors: true,
|
enableColors: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
// default logging format for Fiber's default logger
|
|
||||||
var defaultFormat = "[${time}] ${ip} ${status} - ${latency} ${method} ${path} ${error}\n"
|
|
||||||
|
|
||||||
// Helper function to set default values
|
// Helper function to set default values
|
||||||
func configDefault(config ...Config) Config {
|
func configDefault(config ...Config) Config {
|
||||||
// Return default config if nothing provided
|
// Return default config if nothing provided
|
||||||
|
|
|
@ -28,7 +28,7 @@ func defaultLoggerInstance(c fiber.Ctx, data *Data, cfg Config) error {
|
||||||
buf := bytebufferpool.Get()
|
buf := bytebufferpool.Get()
|
||||||
|
|
||||||
// Default output when no custom Format or io.Writer is given
|
// Default output when no custom Format or io.Writer is given
|
||||||
if cfg.Format == defaultFormat {
|
if cfg.Format == FormatDefault {
|
||||||
// Format error if exist
|
// Format error if exist
|
||||||
formatErr := ""
|
formatErr := ""
|
||||||
if cfg.enableColors {
|
if cfg.enableColors {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package logger
|
package logger
|
||||||
|
|
||||||
const (
|
const (
|
||||||
FormatDefault = "${time}] ${ip} ${status} - ${latency} ${method} ${path} ${error}"
|
FormatDefault = "[${time}] ${ip} ${status} - ${latency} ${method} ${path} ${error}\n"
|
||||||
FormatCommonLog = "${ip} - - [${time}] \"${method} ${url} ${protocol}\" ${status} ${bytesSent}\n"
|
FormatCommonLog = "${ip} - - [${time}] \"${method} ${url} ${protocol}\" ${status} ${bytesSent}\n"
|
||||||
FormatCombined = "${ip} - - [${time}] \"${method} ${url} ${protocol}\" ${status} ${bytesSent} \"${referer}\" \"${ua}\"\n"
|
FormatCombined = "${ip} - - [${time}] \"${method} ${url} ${protocol}\" ${status} ${bytesSent} \"${referer}\" \"${ua}\"\n"
|
||||||
FormatJSON = "{\"time\":\"${time}\",\"ip\":\"${ip}\",\"method\":\"${method}\",\"url\":\"${url}\",\"status\":${status},\"bytesSent\":${bytesSent}}\n"
|
FormatJSON = "{\"time\":\"${time}\",\"ip\":\"${ip}\",\"method\":\"${method}\",\"url\":\"${url}\",\"status\":${status},\"bytesSent\":${bytesSent}}\n"
|
||||||
|
|
|
@ -467,7 +467,7 @@ func Test_Logger_All(t *testing.T) {
|
||||||
require.Equal(t, expected, buf.String())
|
require.Equal(t, expected, buf.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_Logger_CLF(t *testing.T) {
|
func Test_Logger_CLF_Format_With_Name(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
buf := bytebufferpool.Get()
|
buf := bytebufferpool.Get()
|
||||||
defer bytebufferpool.Put(buf)
|
defer bytebufferpool.Put(buf)
|
||||||
|
@ -488,8 +488,155 @@ func Test_Logger_CLF(t *testing.T) {
|
||||||
fiber.MethodGet, "/?foo=bar", "HTTP/1.1",
|
fiber.MethodGet, "/?foo=bar", "HTTP/1.1",
|
||||||
fiber.StatusNotFound,
|
fiber.StatusNotFound,
|
||||||
0)
|
0)
|
||||||
logAnswer := buf.String()
|
logResponse := buf.String()
|
||||||
require.Equal(t, expected, logAnswer)
|
require.Equal(t, expected, logResponse)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_Logger_CLF_Format_With_Const(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
buf := bytebufferpool.Get()
|
||||||
|
defer bytebufferpool.Put(buf)
|
||||||
|
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
app.Use(New(Config{
|
||||||
|
Format: FormatCommonLog,
|
||||||
|
Stream: buf,
|
||||||
|
}))
|
||||||
|
|
||||||
|
resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/?foo=bar", nil))
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, fiber.StatusNotFound, resp.StatusCode)
|
||||||
|
|
||||||
|
expected := fmt.Sprintf("0.0.0.0 - - [%s] \"%s %s %s\" %d %d\n",
|
||||||
|
time.Now().Format("15:04:05"),
|
||||||
|
fiber.MethodGet, "/?foo=bar", "HTTP/1.1",
|
||||||
|
fiber.StatusNotFound,
|
||||||
|
0)
|
||||||
|
logResponse := buf.String()
|
||||||
|
require.Equal(t, expected, logResponse)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_Logger_Combined_CLF_Format_With_Name(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
buf := bytebufferpool.Get()
|
||||||
|
defer bytebufferpool.Put(buf)
|
||||||
|
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
app.Use(New(Config{
|
||||||
|
Format: "combined",
|
||||||
|
Stream: buf,
|
||||||
|
}))
|
||||||
|
const expectedUA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
|
||||||
|
const expectedReferer = "http://example.com"
|
||||||
|
req := httptest.NewRequest(fiber.MethodGet, "/?foo=bar", nil)
|
||||||
|
req.Header.Set("Referer", expectedReferer)
|
||||||
|
req.Header.Set("User-Agent", expectedUA)
|
||||||
|
resp, err := app.Test(req)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, fiber.StatusNotFound, resp.StatusCode)
|
||||||
|
|
||||||
|
expected := fmt.Sprintf("0.0.0.0 - - [%s] \"%s %s %s\" %d %d \"%s\" \"%s\"\n",
|
||||||
|
time.Now().Format("15:04:05"),
|
||||||
|
fiber.MethodGet, "/?foo=bar", "HTTP/1.1",
|
||||||
|
fiber.StatusNotFound,
|
||||||
|
0,
|
||||||
|
expectedReferer,
|
||||||
|
expectedUA)
|
||||||
|
logResponse := buf.String()
|
||||||
|
require.Equal(t, expected, logResponse)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_Logger_Combined_CLF_Format_With_Const(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
buf := bytebufferpool.Get()
|
||||||
|
defer bytebufferpool.Put(buf)
|
||||||
|
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
app.Use(New(Config{
|
||||||
|
Format: FormatCombined,
|
||||||
|
Stream: buf,
|
||||||
|
}))
|
||||||
|
const expectedUA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
|
||||||
|
const expectedReferer = "http://example.com"
|
||||||
|
req := httptest.NewRequest(fiber.MethodGet, "/?foo=bar", nil)
|
||||||
|
req.Header.Set("Referer", expectedReferer)
|
||||||
|
req.Header.Set("User-Agent", expectedUA)
|
||||||
|
resp, err := app.Test(req)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, fiber.StatusNotFound, resp.StatusCode)
|
||||||
|
|
||||||
|
expected := fmt.Sprintf("0.0.0.0 - - [%s] \"%s %s %s\" %d %d \"%s\" \"%s\"\n",
|
||||||
|
time.Now().Format("15:04:05"),
|
||||||
|
fiber.MethodGet, "/?foo=bar", "HTTP/1.1",
|
||||||
|
fiber.StatusNotFound,
|
||||||
|
0,
|
||||||
|
expectedReferer,
|
||||||
|
expectedUA)
|
||||||
|
logResponse := buf.String()
|
||||||
|
require.Equal(t, expected, logResponse)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_Logger_Json_Format_With_Name(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
buf := bytebufferpool.Get()
|
||||||
|
defer bytebufferpool.Put(buf)
|
||||||
|
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
app.Use(New(Config{
|
||||||
|
Format: "json",
|
||||||
|
Stream: buf,
|
||||||
|
}))
|
||||||
|
|
||||||
|
req := httptest.NewRequest(fiber.MethodGet, "/?foo=bar", nil)
|
||||||
|
resp, err := app.Test(req)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, fiber.StatusNotFound, resp.StatusCode)
|
||||||
|
|
||||||
|
expected := fmt.Sprintf(
|
||||||
|
"{\"time\":\"%s\",\"ip\":\"%s\",\"method\":\"%s\",\"url\":\"%s\",\"status\":%d,\"bytesSent\":%d}\n",
|
||||||
|
time.Now().Format("15:04:05"),
|
||||||
|
"0.0.0.0",
|
||||||
|
fiber.MethodGet,
|
||||||
|
"/?foo=bar",
|
||||||
|
fiber.StatusNotFound,
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
logResponse := buf.String()
|
||||||
|
require.Equal(t, expected, logResponse)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_Logger_Json_Format_With_Const(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
buf := bytebufferpool.Get()
|
||||||
|
defer bytebufferpool.Put(buf)
|
||||||
|
|
||||||
|
app := fiber.New()
|
||||||
|
|
||||||
|
app.Use(New(Config{
|
||||||
|
Format: FormatJSON,
|
||||||
|
Stream: buf,
|
||||||
|
}))
|
||||||
|
|
||||||
|
req := httptest.NewRequest(fiber.MethodGet, "/?foo=bar", nil)
|
||||||
|
resp, err := app.Test(req)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, fiber.StatusNotFound, resp.StatusCode)
|
||||||
|
|
||||||
|
expected := fmt.Sprintf(
|
||||||
|
"{\"time\":\"%s\",\"ip\":\"%s\",\"method\":\"%s\",\"url\":\"%s\",\"status\":%d,\"bytesSent\":%d}\n",
|
||||||
|
time.Now().Format("15:04:05"),
|
||||||
|
"0.0.0.0",
|
||||||
|
fiber.MethodGet,
|
||||||
|
"/?foo=bar",
|
||||||
|
fiber.StatusNotFound,
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
logResponse := buf.String()
|
||||||
|
require.Equal(t, expected, logResponse)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getLatencyTimeUnits() []struct {
|
func getLatencyTimeUnits() []struct {
|
||||||
|
|
Loading…
Reference in New Issue