گزارش فیبر

ما می‌توانیم از گزارش‌ها برای مشاهده رفتار برنامه، تشخیص مشکلات یا پیکربندی هشدارهای مرتبط استفاده کنیم. تعریف یک گزارش با ساختار خوب می‌تواند کارآیی جستجو را بهبود بخشیده و برخورد با مسائل را آسان‌تر کند.

فیبر یک روش پیش‌فرض برای چاپ گزارشات به خروجی استاندارد فراهم می‌کند. همچنین چندین تابع سراسری را نیز فراهم می‌کند، مانند 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 پیش‌فرض برای خروجی استاندارد استفاده می‌کند. همچنین می‌توانید آداپتورهایی که قبلاً پیاده‌سازی شده‌اند را در پوشه contrib پیدا کنید، یا از یک 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 دیگر معروف برای ورود به سیستم استفاده کنید.