سجل (Logger)
واجهة برمجية لـ 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("خطأ في فتح الملف: %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 |
تحديد الدالة التي تتخطى الوسيط عندما تعيد القيمة true. | nil |
Done | func(*fiber.Ctx, []byte) |
دالة تُستدعى بعد كتابة سلسلة تسجيل الطلب إلى الإخراج، حيث يتم تمرير سلسلة التسجيل كمعلمة. | nil |
CustomTags | map[string]LogFunc |
تعريف وظائف الوسم للعمليات المخصصة. | map[string]LogFunc |
Format | string |
تعريف الوسوم في سلسلة التسجيل. | [${time}] ${status} - ${latency} ${method} ${path}\n |
TimeFormat | string |
تحديد تنسيق الوقت للطابع الزمني في سجل التسجيل. | 15:04:05 |
TimeZone | string |
يمكن تحديد نطاق التوقيت كـ "UTC"، "America/New_York"، "Asia/Chongqing"، إلخ. | "Local" |
TimeInterval | time.Duration |
تحدد فاصل الزمن قبل تحديث الطابع الزمني. | 500 * time.Millisecond |
Output | io.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,
}
الثوابت
// متغيرات سجل
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" // وكيل المستخدم
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" // إعادة تعيين اللون
)