Fiber Log

เราสามารถใช้ logs เพื่อสังเกตพฤติกรรมของโปรแกรม วินิจฉัยปัญหา หรือกำหนดค่าการแจ้งเตือนที่เกี่ยวข้อง การกำหนด logs ที่มีโครงสร้างที่ดีสามารถเพิ่มประสิทธิภาพในการค้นหาและอำนวยความสะดวกในการจัดการปัญหา

Fiber มีวิธีการที่กำหนดไว้แบบค่าเริ่มต้นในการพิมพ์ logs ไปยังเอาต์พุทมาตรฐาน และยังมีฟังก์ชันทั่วไปหลายรูปแบบ เช่น log.Info, log.Errorf, และ log.Warnw.

ระดับของ Log

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

กำหนด Log แบบกำหนดเอง

Fiber มี AllLogger interface เพื่อให้เหมาะสำหรับหลายห้องสมุด logging ที่แตกต่างกัน

type CommonLogger interface {
    Logger
    FormatLogger
    WithLogger
}

type AllLogger interface {
    CommonLogger
    ControlLogger
    WithLogger
}

พิมพ์ Logs

หมายเหตุ: เรียกใช้วิธีที่ระดับ Fatal จะหยุดการดำเนินโปรแกรมทันทีหลังจากพิมพ์ logs กรุณาใช้ด้วยความระมัดระวัง การพิมพ์ logs โดยตรงในระดับต่าง ๆ จะถูกนำไปใส่ใน messageKey และเริ่มต้นเป็น msg ตามค่าเริ่มต้น

log.Info("สวัสดี, โลก!")
log.Debug("คุณทุกสิ่งโอเคหรือ?")
log.Info("42 เป็นคำตอบของชีวิต จักรวาล และทุกสิ่่ง")
log.Warn("เรากำลังถูกโจมตี!")
log.Error("ฮิวสตัน, เรามีปัญหา")
log.Fatal("ลาก่อน และขอบคุณสำหรับปลา")
log.Panic("ระบบล่ม")

การจัดรูปแบบและพิมพ์ logs ในระดับต่าง ๆ ทุกวิธีจบลงด้วย f

log.Debugf("สวัสดี %s", "เด็กผู้ชาย")
log.Infof("%d เป็นคำตอบของชีวิต จักรวาล และทุกสิ่่ง", 233)
log.Warnf("เรากำลังถูกโจมตี %s!", "เจ้านาย")
log.Errorf("%s, เรามีปัญหา", "Master Shifu")
log.Fatalf("ลาก่อน, และขอบคุณสำหรับทุก %s.", "กล้วย")

พิมพ์ข้อความพร้อมกับคีย์และค่า หากคีย์และค่าไม่ได้จับคู่กัน KEYVALS UNPAIRED จะถูกพิมพ์

log.Debugw("", "สวัสดี", "เด็กผู้ชาย")
log.Infow("", "number", 233)
log.Warnw("", "งาน", "เจ้านาย")
log.Errorw("", "ชื่อ", "Master Shifu")
log.Fatalw("", "ผลไม้", "กล้วย")

ระบบ Logs ระดับล่าง

หากคุณต้องการใช้ฟังก์ชัน logs อย่างเดียวในโครงการและพิมพ์ global ได้ตลอดเวลา เรามี logs global ให้บริการ

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

log.Info("ข้อมูล")
log.Warn("คำเตือน")

โค้ดข้างต้นใช้ log.DefaultLogger เริ่มต้นสำหรับเอาต์พุทมาตรฐาน คุณยังสามารถหา adapter ที่ทำการแล้วอยู่ในโฟลเดอร์ contrib หรือใช้ Logger ที่คุณเองทำการจัดทำแล้วและกำหนด logger global โดยใช้ log.SetLogger.

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

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

type customLogger struct {
    stdlog *log.Logger
}

// ...
// ฉีด custom logger เข้าไป
fiberlog.SetLogger(customLogger)

กำหนดระดับ

log.SetLevel กำหนด logs ที่ต่ำกว่าระดับนี้และจะไม่พิมพ์ออกมา ตัวดำเนินการ logs เริ่มต้นคือ LevelTrace.

โปรดทราบว่าวิธีนี้ไม่มีความปลอดภัยในการทำงานแบบพร้อมกัน

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

log.SetLevel(log.LevelInfo)

กำหนด Output

log.SetOutput กำหนดสถานที่ปลายทางในการพิมพ์ logs โดยใช้ค่าเริ่มต้น logger พิมพ์ logs ไปยังคอนโซล

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")

หมายเหตุ: นี่คือไลบรารีเขียวมาตรฐานสำหรับ Framework Fiber แบบค่าเริ่มต้น แน่นอนว่าคุณสามารถเลือกใช้ไลบรารีการบันทึกข้อมูลอันอื่นที่มีชื่อเสียงใน Go ได้