0Pricing
Go Academy · บทเรียน

ระดับและแอตทริบิวต์ของบันทึก

เพิ่มบริบทให้บันทึก

ระดับและแอตทริบิวต์ของบันทึก เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุผลที่ใช้บันทึกแบบมีโครงสร้าง
  2. ตัวจัดการ slog
  3. ระดับและแอตทริบิวต์ของบันทึก
  4. ตัวจัดการแบบกำหนดเอง
← กลับไปที่ Go Academy