บันทึกข้อมูล (Logger)
Middleware สำหรับ Fiber ซึ่งใช้สำหรับบันทึกข้อมูลเกี่ยวกับ HTTP requests และ responses อย่างละเอียด
อินเตอร์เฟซ
func New(config ...Config) fiber.Handler
ตัวอย่าง
นำเข้า middleware package ของ Fiber web framework:
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/logger"
)
หมายเหตุ: การลงทะเบียนเรียกเป็นลำดับเป็นสิ่งสำคัญ รูทที่ลงทะเบียนหลังจาก middleware นี้จะถูกบันทึกเท่านั้น ดังนั้น middleware นี้ควรเป็นหนึ่งในรายการแรกที่จะลงทะเบียน
หลังจากที่ Fiber application ถูกกำหนดค่าเรียบร้อยแล้ว สามารถที่จะลงทะเบียน middleware ได้ตามวิธีต่อไปนี้:
// กำหนดค่าเริ่มต้น
app.Use(logger.New())
// หรือกำหนดค่าอื่นๆ
// บันทึก IP และพอร์ตที่เชื่อมต่อ
app.Use(logger.New(logger.Config{
Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))
// บันทึก request ID
app.Use(requestid.New())
app.Use(logger.New(logger.Config{
// สำหรับตัวเลือกเพิ่มเติม ดูได้ที่ส่วนของ Config
Format: "${pid} ${locals:requestid} ${status} - ${method} ${path}\n",
}))
// เปลี่ยนโฉมและรูปแบบเวลา
app.Use(logger.New(logger.Config{
Format: "${pid} ${status} - ${method} ${path}\n",
TimeFormat: "02-Jan-2006",
TimeZone: "America/New_York",
}))
// กำหนดกำไร์มาเป็นไฟล์แบบกำหนดเอง
file, err := os.OpenFile("./123.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
log.Fatalf("error opening file: %v", err)
}
defer file.Close()
app.Use(logger.New(logger.Config{
Output: file,
}))
// เพิ่มแท็กกำหนดเอง
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("นี่คือแท็กกำหนดเอง")
},
},
}))
// ฟังก์ชัน callback หลังจากบันทึกเสร็จ
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)
}
},
}))
// ปิดการใช้งานสีเมื่อผลลัพธ์อยู่ในรูปแบบเริ่มต้น
app.Use(logger.New(logger.Config{
DisableColors: true,
}))
การกำหนดค่า
Property | Type | คำอธิบาย | ค่าเริ่มต้น |
---|---|---|---|
Next | func(*fiber.Ctx) bool |
กำหนดฟังก์ชันที่ข้าม middleware เมื่อมันส่งคืนค่า true | nil |
Done | func(*fiber.Ctx, []byte) |
ฟังก์ชันที่เรียกหลังจากเขียนสตริงบันทึกของคำขอลงใน Output พร้อมกับสตริงบันทึกที่ถูกส่งเป็นพารามิเตอร์ | nil |
CustomTags | map[string]LogFunc |
กำหนดการดำเนินการแท็กที่กำหนดเอง | map[string]LogFunc |
Format | string |
กำหนดแท็กบันทึก | [${time}] ${status} - ${latency} ${method} ${path}\n |
TimeFormat | string |
กำหนดรูปแบบเวลาของแท็กการบันทึกเวลา | 15:04:05 |
TimeZone | string |
สามารถกำหนดเวลาโซนเฮาต์ | "Local" |
TimeInterval | time.Duration |
เวลารอก่อนที่จะอัพเดต timestamp | 500 * time.Millisecond |
Output | io.Writer |
Output เป็น writer ที่ใช้ในการเขียนบันทึก | os.Stdout |
DisableColors | bool |
กำหนดว่าการแสดงผลบันทึกควรมีสีหรือไม่ | false |
enableColors | bool |
ฟิลด์ภายในที่เปิดใช้งานสีในการแสดงผลบันทึก (ฟิลด์นี้ไม่ใช่ฟิลด์ที่สามารถกำหนดค่า) | - |
enableLatency | bool |
ฟิลด์ภายในที่เปิดใช้งานการวัดเวลาการตอบสนองในบันทึก (ฟิลด์นี้ไม่ใช่ฟิลด์ที่สามารถกำหนดค่า) | - |
timeZoneLocation | *time.Location |
ฟิลด์ภายในสำหรับตำแหน่งโซนเวลา (ฟิลด์นี้ไม่ใช่ฟิลด์ที่สามารถกำหนดค่า) | - |
การกำหนดค่าเริ่มต้น
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,
}
ค่าคงที่
// ตัวแปรของ Logger
const (
TagPid = "pid" // รหัสประมวลผล
TagTime = "time" // เวลา
TagReferer = "referer" // ผู้อ้างอิง
TagProtocol = "protocol" // โปรโตคอล
TagPort = "port" // พอร์ต
TagIP = "ip" // ที่อยู่ IP
TagIPs = "ips" // ที่อยู่ IP หลายๆ แห่ง
TagHost = "host" // โฮสต์
TagMethod = "method" // วิธีการร้องขอ
TagPath = "path" // เส้นทาง
TagURL = "url" // URL
TagUA = "ua" // เครื่องผู้ใช้ (User Agent)
TagLatency = "latency" // ความหน่วงเวลา
TagStatus = "status" // สถานะการตอบกลับ
TagResBody = "resBody" // ร่างกายการตอบกลับ
TagReqHeaders = "reqHeaders" // ส่งข้อมูลหัวร้องขอ
TagQueryStringParams = "queryParams" // พารามิเตอร์การสอบถาม
TagBody = "body" // ร่างกายของการร้องขอ
TagBytesSent = "bytesSent" // จำนวนไบต์ที่ส่ง
TagBytesReceived = "bytesReceived" // จำนวนไบต์ที่รับ
TagRoute = "route" // เส้นทาง
TagError = "error" // ข้อผิดพลาด
// เลิกใช้: ใช้ TagReqHeader แทน
TagHeader = "header:" // หัวข้อร้องขอ
TagReqHeader = "reqHeader:" // หัวข้อร้องขอ
TagRespHeader = "respHeader:" // หัวข้อตอบกลับ
TagQuery = "query:" // คิวรี่
TagForm = "form:" // ฟอร์ม
TagCookie = "cookie:" // คุ๊กกี้
TagLocals = "locals:" // ตัวแปรท้องถิ่น
// สี
TagBlack = "black" // สีดำ
TagRed = "red" // สีแดง
TagGreen = "green" // สีเขียว
TagYellow = "yellow" // สีเหลือง
TagBlue = "blue" // สีน้ำเงิน
TagMagenta = "magenta" // สีแดงม่วง
TagCyan = "cyan" // สีฟ้า
TagWhite = "white" // สีขาว
TagReset = "reset" // รีเซ็ตสี
)