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 ได้