سجل الألياف

يمكننا استخدام السجلات لمراقبة سلوك البرنامج، وتشخيص المشاكل، أو تكوين تنبيهات متوافقة. تعريف سجل مُنظم بشكل جيد يمكن أن يحسن من كفاءة البحث ويسهل التعامل مع المشاكل.

توفر "فايبر" طريقة افتراضية لطباعة السجلات إلى الإخراج القياسي. كما توفر أيضًا عدة وظائف عالمية، مثل log.Info، log.Errorf، و log.Warnw.

مستويات السجل

const (
    LevelTrace Level = iota
    LevelDebug
    LevelInfo
    LevelWarn
    LevelError
    LevelFatal
    LevelPanic
)

سجل مخصص

توفر "فايبر" واجهة AllLogger للتكيف مع مكتبات السجل المختلفة.

type CommonLogger interface {
    Logger
    FormatLogger
    WithLogger
}

type AllLogger interface {
    CommonLogger
    ControlLogger
    WithLogger
}

طباعة السجلات

ملاحظة: سيقوم استدعاء الأساليب على مستوى Fatal بتوقف تنفيذ البرنامج بعد طباعة السجل. يُرجى استخدام هذا بحذر. سيتم إدخال السجلات مباشرة على مستويات مختلفة إلى "messageKey" وتُعين افتراضيًا على "msg".

log.Info("مرحبًا، عالم!")
log.Debug("هل أنت بخير؟")
log.Info("42 هو الإجابة على الحياة والكون وكل شيء")
log.Warn("نحن تحت الهجوم!")
log.Error("هيوستن، لدينا مشكلة.")
log.Fatal("أود انتهاء الوقت، وشكرًا على كل الأسماك.")
log.Panic("النظام توقف.")

تنسيق وطباعة السجلات على مستويات مختلفة، حيث تنتهي جميع الأساليب بالحرف f.

log.Debugf("مرحبًا %s", "صبي")
log.Infof("%d هو الإجابة على الحياة والكون وكل شيء", 233)
log.Warnf("نحن تحت الهجوم %s!", "رئيس")
log.Errorf("%s، لدينا مشكلة.", "ماستر شيفو")
log.Fatalf("أود انتهاء الوقت، وشكرًا على كل %s.", "موز")

طباعة الرسائل مع مفاتيح وقيم. إذا لم تكن المفاتيح والقيم متزانة، سيتم طباعة KEYVALS UNPAIRED.

log.Debugw("", "مرحبًا", "صبي")
log.Infow("", "الرقم", 233)
log.Warnw("", "المهمة", "رئيس")
log.Errorw("", "الاسم", "ماستر شيفو")
log.Fatalw("", "الفاكهة", "موز")

سجل عالمي

إذا كنت ترغب في استخدام وظيفة سجل بسيطة فقط في مشروع وطباعتها عالميًا في أي وقت، نحن نُوفّر سجلًا عالميًا.

import "github.com/gofiber/fiber/v2/log"

log.Info("معلومات")
log.Warn("تحذير")

يستخدم الكود أعلاه log.DefaultLogger الافتراضي للإخراج القياسي. يمكنك أيضًا العثور على محولات تم تنفيذها بالفعل في مجلد "المساهمات"، أو استخدام Logger الذي تم تنفيذه بنفسك وتعيين السجل العالمي باستخدام log.SetLogger.

import (
    "log"
    fiberlog "github.com/gofiber/fiber/v2/log"
)

var _ log.AllLogger = (*customLogger)(nil)

type customLogger struct {
    stdlog *log.Logger
}

// ...
// حقن السجل المخصص
fiberlog.SetLogger(customLogger)

تعيين المستوى

log.SetLevel يحدد السجلات التي أقل من هذا المستوى ولن تُخرج. مُسجّل السجل الافتراضي هو LevelTrace.

يرجى ملاحظة أن هذه الطريقة ليست آمنة للتعددية.

import "github.com/gofiber/fiber/v2/log"

log.SetLevel(log.LevelInfo)

تعيين الإخراج

log.SetOutput يحدد وجهة الإخراج لتسجيل السجل. افتراضيًا، يقوم المسجل بطباعة السجلات إلى وحدة التحكم.

var logger AllLogger = &defaultLogger{
    stdlog: log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile|log.Lmicroseconds),
    depth:  4,
}

تعيين وجهة الإخراج إلى ملف.

// الإخراج إلى ملف test.log
f, err := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
    return
}
log.SetOutput(f)

تعيين وجهة الإخراج إلى وحدة التحكم وملف.

// الإخراج إلى ملف test.log
file, _ := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
iw := io.MultiWriter(os.Stdout, file)
log.SetOutput(iw)

الارتباط بالسياق

قم بتعيين السياق، واستخدام الطريقة التالية لإعادة CommonLogger مرتبطة بالسياق المحدد.

commonLogger := log.WithContext(ctx)
commonLogger.Info("info")

ملاحظة: هذه هي المكتبة الافتراضية لتسجيل الأحداث لإطار العمل Fiber. بالطبع، يمكنك اختيار مكتبات تسجيل الأحداث المفتوحة المصدر الأخرى المعروفة لـ Go.