Bộ ghi chép

Là một middleware cho Fiber được sử dụng để ghi lại thông tin chi tiết về các yêu cầu và phản hồi HTTP.

Giao diện

func New(config ...Config) fiber.Handler

Ví dụ

Nhập gói middleware của framework web Fiber:

import (
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/logger"
)

Lưu ý: Thứ tự đăng ký là quan trọng. Chỉ có các route được đăng ký sau middleware này mới được ghi lại. Do đó, middleware này nên là một trong những middleware đầu tiên được đăng ký.

Sau khi khởi tạo ứng dụng Fiber, có thể đăng ký middleware theo cách sau:

// Khởi tạo với cấu hình mặc định
app.Use(logger.New())

// Hoặc tùy chỉnh cấu hình
// Ghi lại IP và cổng từ xa
app.Use(logger.New(logger.Config{
    Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))

// Ghi lại ID yêu cầu
app.Use(requestid.New())
app.Use(logger.New(logger.Config{
    // Đối với các tùy chọn khác, xem phần Config
    Format: "${pid} ${locals:requestid} ${status} - ${method} ${path}\n",
}))

// Thay đổi múi giờ và định dạng thời gian
app.Use(logger.New(logger.Config{
    Format:     "${pid} ${status} - ${method} ${path}\n",
    TimeFormat: "02-Jan-2006",
    TimeZone:   "America/New_York",
}))

// Người viết tệp tùy chỉnh
file, err := os.OpenFile("./123.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
    log.Fatalf("lỗi mở tệp: %v", err)
}
defer file.Close()
app.Use(logger.New(logger.Config{
    Output: file,
}))

// Thêm thẻ tùy chỉnh
app.Use(logger.New(logger.Config{
    CustomTags: map[string]logger.LogFunc{
        "custom_tag": func(output logger.Buffer, c *fiber.Ctx, data *logger.Data, extraParam string) (int, error) {
            return output.WriteString("Đây là một thẻ tùy chỉnh")
        },
    },
}))

// Hàm gọi lại sau khi ghi lại
app.Use(logger.New(logger.Config{
    TimeFormat: time.RFC3339Nano,
    TimeZone:   "Asia/Shanghai",
    Done: func(c *fiber.Ctx, logString []byte) {
        if c.Response().StatusCode() != fiber.StatusOK {
            reporter.SendToSlack(logString) 
        }
    },
}))

// Tắt màu khi đầu ra theo định dạng mặc định
app.Use(logger.New(logger.Config{
    DisableColors: true,
}))

Cấu hình

Thuộc tính Kiểu Mô tả Giá trị Mặc định
Tiếp theo func(*fiber.Ctx) bool Tiếp theo xác định một hàm bỏ qua middleware khi nó trả về true. nil
Hoàn tất func(*fiber.Ctx, []byte) Hoàn tất là một hàm được gọi sau khi ghi chuỗi log của yêu cầu vào Output, với chuỗi log được chuyển làm tham số. nil
CustomTags map[string]LogFunc tagFunctions xác định các thao tác thẻ tùy chỉnh. map[string]LogFunc
Định dạng string Định dạng xác định các thẻ log. [${time}] ${status} - ${latency} ${method} ${path}\n
Định dạngThời gian string Định dạngThời gian xác định định dạng thời gian của dấu thời gian log. 15:04:05
Múi giờ string Múi giờ có thể được chỉ định là "UTC", "America/New_York", "Asia/Chongqing", v.v. "Local"
Khoảng thời gian time.Duration Khoảng thời gian là thời gian trễ trước khi cập nhật dấu thời gian. 500 * time.Millisecond
Output io.Writer Output là một bộ ghi được sử dụng để ghi log. os.Stdout
TắtMàu bool TắtMàu xác định liệu đầu ra log có nên được màu hay không. false
enableColors bool Trường nội bộ để bật màu sắc trong đầu ra log. (Đây không phải là một trường có thể cấu hình) -
enableLatency bool Trường nội bộ để bật đo lường độ trễ trong log. (Đây không phải là một trường có thể cấu hình) -
timeZoneLocation *time.Location Trường nội bộ cho vị trí múi giờ. (Đây không phải là một trường có thể cấu hình) -

Cấu hình mặc định

var ConfigDefault = Config{
    Next:          nil,
    Done:          nil,
    Format:        "[${time}] ${status} - ${latency} ${method} ${path}\n",
    TimeFormat:    "15:04:05",
    TimeZone:      "Local",
    TimeInterval:  500 * time.Millisecond,
    Output:        os.Stdout,
    DisableColors: false,
}

Hằng số

// Biến ghi nhật ký
const (
    TagPid               = "pid"               	// ID Quá trình
    TagTime              = "time"              	// Thời gian
    TagReferer           = "referer"           	// Người gửi
    TagProtocol          = "protocol"          	// Giao thức
    TagPort              = "port"              	// Cổng
    TagIP                = "ip"                	// Địa chỉ IP
    TagIPs               = "ips"               	// Địa chỉ IP
    TagHost              = "host"              	// Máy Chủ
    TagMethod            = "method"            	// Phương thức Yêu cầu
    TagPath              = "path"              	// Đường dẫn
    TagURL               = "url"               	// URL
    TagUA                = "ua"                	// Điều hành Người dùng
    TagLatency           = "latency"           	// Trì trệ
    TagStatus            = "status"            	// Trạng thái Phản hồi
    TagResBody           = "resBody"           	// Nội dung phản hồi
    TagReqHeaders        = "reqHeaders"        	// Tiêu đề Yêu cầu
    TagQueryStringParams = "queryParams"       	// Tham số Truy vấn
    TagBody              = "body"              	// Nội dung Yêu cầu
    TagBytesSent         = "bytesSent"         	// Số byte Đã gửi
    TagBytesReceived     = "bytesReceived"     	// Số byte Đã nhận
    TagRoute             = "route"             	// Đường đi
    TagError             = "error"             	// Lỗi
    // Không còn hỗ trợ: Sử dụng TagReqHeader thay thế
    TagHeader            = "header:"           	// Tiêu đề Yêu cầu
    TagReqHeader         = "reqHeader:"        	// Tiêu đề Yêu cầu
    TagRespHeader        = "respHeader:"       	// Tiêu đề Phản hồi
    TagQuery             = "query:"            	// Truy vấn
    TagForm              = "form:"             	// Mẫu
    TagCookie            = "cookie:"           	// Cookie
    TagLocals            = "locals:"           	// Biến Cục bộ
    // Màu sắc
    TagBlack             = "black"             	// Đen
    TagRed               = "red"               	// Đỏ
    TagGreen             = "green"             	// Xanh lá cây
    TagYellow            = "yellow"            	// Vàng
    TagBlue              = "blue"              	// Xanh dương
    TagMagenta           = "magenta"           	// Màu đỏ tím
    TagCyan              = "cyan"              	// Xanh lơ
    TagWhite             = "white"             	// Trắng
    TagReset             = "reset"             	// Đặt lại Màu
)