گزارشگیر لاگر
یک میانافزار برای Fiber است که برای گزارش دقیق اطلاعات درخواست و پاسخ HTTP استفاده میشود.
رابط
func New(config ...Config) fiber.Handler
مثال
وارد کردن بسته میانافزار میانوب چارچوب Fiber:
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/logger"
)
توجه: ترتیب ثبتنام بسیار حیاتی است. فقط مسیرهایی که پس از این میانافزار ثبتنام شوند، لاگ خواهند شد. بنابراین این میانافزار باید یکی از اولین میانافزارهایی باشد که ثبتنام شود.
بعد از مقدمه کردن برنامه Fiber، ممکن است میانافزار را به این شکل ثبتنام کنید:
// با پیکربندی پیشفرض مقدمه کنید
app.Use(logger.New())
// یا پیکربندی را سفارشی کنید
// لاگ نمایش IP و پورت را
app.Use(logger.New(logger.Config{
Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))
// لاگ شناسه درخواست
app.Use(requestid.New())
app.Use(logger.New(logger.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("این یک تگ سفارشی است")
},
},
}))
// تابع بازخوانی پس از لاگ
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,
}))
پیکربندی
خاصیت | نوع | توضیحات | مقدار پیشفرض |
---|---|---|---|
Next | func(*fiber.Ctx) bool |
Next یک تابع را تعریف میکند که وقتی که مقدار برمیگرداند، میانافزار را نادیده میگیرد. | nil |
Done | func(*fiber.Ctx, []byte) |
Done یک تابع است که پس از نوشتن رشته لاگ درخواست به Output فراهم میکند، با رشته لاگ به عنوان پارامتر. | nil |
CustomTags | map[string]LogFunc |
tagFunctions عملیات برچسب سفارشی را تعیین میکند. | map[string]LogFunc |
Format | string |
Format برچسبهای لاگ را تعیین میکند. | [${time}] ${status} - ${latency} ${method} ${path}\n |
TimeFormat | string |
TimeFormat فرمت زمان برچسب زماننشانی را تعیین میکند. | 15:04:05 |
TimeZone | string |
TimeZone میتواند به عنوان "UTC"، "America/New_York"، "Asia/Chongqing" و غیره تعیین شود. | "Local" |
TimeInterval | time.Duration |
TimeInterval زمان تأخیر قبل از بهروزرسانی برچسب زماننشانی است. | 500 * time.Millisecond |
Output | io.Writer |
Output نویسندهای است که برای نوشتن لاگها استفاده میشود. | os.Stdout |
DisableColors | bool |
DisableColors تعیین میکند که آیا خروجی لاگ باید رنگی باشد یا خیر. | 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,
}
ثابتها
// متغیرهای نواگر
const (
TagPid = "pid" // شناسه فرآیند
TagTime = "time" // زمان
TagReferer = "referer" // مرجع
TagProtocol = "protocol" // پروتکل
TagPort = "port" // پورت
TagIP = "ip" // آدرس آیپی
TagIPs = "ips" // آدرسهای آیپی
TagHost = "host" // میزبان
TagMethod = "method" // روش درخواست
TagPath = "path" // مسیر
TagURL = "url" // آدرس اینترنتی
TagUA = "ua" // عامل کاربر
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" // بازنشانی رنگ
)