گزارش‌گیر لاگر

یک میان‌افزار برای 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"             	// بازنشانی رنگ
)