ระดับและแอตทริบิวต์ของบันทึก
เพิ่มบริบทให้บันทึก
ระดับและแอตทริบิวต์ของบันทึก เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
การเพิ่มบริบทให้บันทึก
ข้อความเปล่าบอกเพียงว่าเกิดอะไรขึ้น ส่วน แอตทริบิวต์ จะบอกรายละเอียดที่ทำให้บันทึกนำไปใช้ดำเนินการได้: ผู้ใช้คนใด คำขอใด และใช้เวลานานเท่าใด
สี่ระดับ
ระดับของ slog เรียงจากความรุนแรงต่ำไปสูง:
Debug(-4)Info(0)Warn(4)Error(8)
ระดับเป็นจำนวนเต็ม คุณจึงกำหนดระดับแบบกำหนดเองแทรกระหว่างระดับเหล่านี้ได้
การกรองตามระดับ
กำหนดระดับขั้นต่ำใน HandlerOptions ระเบียนที่มีระดับต่ำกว่าจะถูกตัดทิ้งอย่างมีประสิทธิภาพ
package main
import (
"log/slog"
"os"
)
func main() {
opts := &slog.HandlerOptions{Level: slog.LevelWarn}
logger := slog.New(slog.NewTextHandler(os.Stdout, opts))
logger.Info("ignored")
logger.Warn("shown")
}แอตทริบิวต์แบบมีชนิดข้อมูล
นอกเหนือจากอาร์กิวเมนต์คีย์-ค่าแบบหลวม ๆ แล้ว slog ยังมีตัวสร้างที่ระบุชนิดข้อมูล ซึ่งช่วยหลีกเลี่ยงข้อผิดพลาดและทำงานได้เร็วกว่า:
slog.String("k", v)slog.Int("k", v)slog.Bool("k", v)slog.Duration("k", d)
slog.Info("done", slog.String("phase", "build"), slog.Int("files", 12))เหตุผลที่ใช้ Attrs แบบมีชนิดข้อมูล
Attrs แบบมีชนิดข้อมูลตรวจจับข้อผิดพลาด "มีอาร์กิวเมนต์เป็นจำนวนคี่" ได้ตั้งแต่เวลาคอมไพล์ และทำให้ตัวจัดการข้ามการสะท้อนได้ โปรดเลือกใช้ในเส้นทางการทำงานที่มีการเรียกใช้บ่อย
การจัดกลุ่มแอตทริบิวต์
slog.Group จะซ้อนฟิลด์ที่เกี่ยวข้องไว้ภายใต้คีย์เดียว
slog.Info("req",
slog.Group("http",
slog.String("method", "GET"),
slog.Int("status", 200),
),
)Logger.With สำหรับบริบทที่ใช้ร่วมกัน
logger.With(...) จะส่งคืนตัวบันทึกลูกที่แนบแอตทริบิวต์เดียวกันไปกับทุกข้อความ เหมาะอย่างยิ่งสำหรับ ID ของคำขอ
reqLog := logger.With("requestID", "abc-123")
reqLog.Info("started")
reqLog.Info("finished")การบันทึกที่คำนึงถึงบริบท
รูปแบบ *Context (เช่น InfoContext) จะส่งต่อ context.Context ทำให้ตัวจัดการดึง ID ของการติดตามออกมาได้
slog.InfoContext(ctx, "handling", "path", "/api")ระดับแบบไดนามิก
ใช้ slog.LevelVar เพื่อเปลี่ยนระดับขณะโปรแกรมทำงาน (เช่น เพิ่มเป็น Debug เมื่อตรวจสอบเหตุการณ์ผิดปกติ) โดยไม่ต้องเริ่มโปรแกรมใหม่
var lvl slog.LevelVar
lvl.Set(slog.LevelInfo)
h := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: &lvl})
// later: lvl.Set(slog.LevelDebug)ข้อผิดพลาดในรูปแอตทริบิวต์
แนบข้อผิดพลาดเป็นแอตทริบิวต์เพื่อให้สืบค้นได้ แทนการต่อข้อความเข้าด้วยกัน
slog.Error("save failed", slog.String("err", err.Error()), slog.Int("retry", 2))เรียกใช้ได้: ระดับและ With
โปรแกรมนี้กรองตามระดับและใช้ตัวบันทึกลูกที่มีบริบทร่วมกัน
package main
import (
"log/slog"
"os"
)
func main() {
opts := &slog.HandlerOptions{Level: slog.LevelInfo}
base := slog.New(slog.NewTextHandler(os.Stdout, opts))
req := base.With("requestID", "r-7")
req.Debug("hidden")
req.Info("processing", slog.Int("items", 3))
}ตรวจสอบอย่างรวดเร็ว
ทดสอบความเข้าใจของคุณเกี่ยวกับระดับและแอตทริบิวต์
สรุป
คุณได้เรียนรู้เกี่ยวกับระดับและแอตทริบิวต์:
- มีสี่ระดับในตัว กรองด้วย
HandlerOptions.Level - Attrs แบบมีชนิดข้อมูล (
slog.String,slog.Int) ปลอดภัยและเร็วกว่า slog.Groupซ้อนฟิลด์ ส่วนlogger.Withใช้บริบทเดียวกันLevelVarทำให้เปลี่ยนระดับขณะโปรแกรมทำงานได้
คำถามที่พบบ่อย
บทเรียน “ระดับและแอตทริบิวต์ของบันทึก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ระดับและแอตทริบิวต์ของบันทึก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ระดับและแอตทริบิวต์ของบันทึก”
เพิ่มบริบทให้บันทึก คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “ระดับและแอตทริบิวต์ของบันทึก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุผลที่ใช้บันทึกแบบมีโครงสร้าง
- ตัวจัดการ slog
- ระดับและแอตทริบิวต์ของบันทึก
- ตัวจัดการแบบกำหนดเอง