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

ตัวจัดการ slog

ตัวจัดการข้อความและ JSON

ตัวจัดการ slog เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

ตัวจัดการเป็นผู้กำหนดรูปแบบ

ใน slog Logger จะเรียก Handler เพื่อจัดรูปแบบและเขียนแต่ละระเบียน การเปลี่ยนตัวจัดการจะเปลี่ยนรูปแบบเอาต์พุตโดยไม่ต้องแก้การเรียกใช้การบันทึก

TextHandler

slog.NewTextHandler จะเขียนบรรทัด key=value ที่อ่านเข้าใจง่ายสำหรับมนุษย์ เหมาะสำหรับการพัฒนาในเครื่องและเทอร์มินัล

package main

import (
    "log/slog"
    "os"
)

func main() {
    h := slog.NewTextHandler(os.Stdout, nil)
    logger := slog.New(h)
    logger.Info("hello", "env", "dev")
}

ตัวจัดการ JSON

slog.NewJSONHandler จะส่งออกออบเจ็กต์ JSON หนึ่งรายการต่อบรรทัด เหมาะอย่างยิ่งสำหรับกระบวนการส่งต่อบันทึกในการใช้งานจริง

package main

import (
    "log/slog"
    "os"
)

func main() {
    h := slog.NewJSONHandler(os.Stdout, nil)
    logger := slog.New(h)
    logger.Info("hello", "env", "prod")
}

การสร้างตัวบันทึก

slog.New(handler) จะห่อตัวจัดการไว้ในตัวบันทึก คุณเรียกใช้ logger.Info, logger.Error และอื่น ๆ กับอินสแตนซ์นั้น

logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))

HandlerOptions

อาร์กิวเมนต์ที่สองของตัวสร้างตัวจัดการคือ *slog.HandlerOptions ส่ง nil เพื่อใช้ค่าเริ่มต้น หรือกำหนดระดับและตำแหน่งต้นทาง

opts := &slog.HandlerOptions{
    Level:     slog.LevelDebug,
    AddSource: true,
}
h := slog.NewJSONHandler(os.Stdout, opts)

การเขียนลงไฟล์หรือบัฟเฟอร์

ตัวจัดการรับ io.Writer ใด ๆ ก็ได้ คุณสามารถบันทึกลงไฟล์ ลงบัฟเฟอร์สำหรับการทดสอบ หรือไปยังเอาต์พุตมาตรฐานได้ การแยกส่วนนี้เป็นจุดสำคัญในการออกแบบ slog

f, _ := os.Create("app.log")
logger := slog.New(slog.NewJSONHandler(f, nil))

การกำหนดตัวบันทึกเริ่มต้น

slog.SetDefault(logger) ทำให้ฟังก์ชันระดับแพ็กเกจ (slog.Info เป็นต้น) ใช้ตัวจัดการของคุณ โปรดกำหนดเพียงครั้งเดียวเมื่อเริ่มต้นโปรแกรม

slog.SetDefault(slog.New(slog.NewJSONHandler(os.Stdout, nil)))
slog.Info("now JSON by default")

เอาต์พุตแบบข้อความเทียบกับ JSON

การเรียกใช้เดียวกัน แต่มีสองรูปแบบ:

  • ข้อความ: time=... level=INFO msg=hello env=dev
  • JSON: {"time":"...","level":"INFO","msg":"hello","env":"dev"}

การเลือกตัวจัดการ

หลักทั่วไป:

  • ในเครื่อง/ระหว่างพัฒนา: TextHandler (อ่านง่าย)
  • การใช้งานจริง/การรวมบันทึก: ตัวจัดการ JSON (วิเคราะห์ได้)

ตัดสินใจผ่านตัวแปรสภาพแวดล้อม เพื่อให้ไบนารีเดียวกันปรับตัวได้

การเขียนการตั้งค่าที่นำกลับมาใช้ใหม่ได้

รวมการสร้างตัวบันทึกไว้ที่จุดเดียว เพื่อให้ทั้งแอปใช้การตั้งค่าเดียวกัน

func newLogger(prod bool) *slog.Logger {
    if prod {
        return slog.New(slog.NewJSONHandler(os.Stdout, nil))
    }
    return slog.New(slog.NewTextHandler(os.Stdout, nil))
}

เรียกใช้ได้: สลับตัวจัดการ

โปรแกรมนี้บันทึกเหตุการณ์เดียวกันผ่านตัวจัดการทั้งสองแบบ เพื่อให้คุณเปรียบเทียบรูปแบบได้

package main

import (
    "log/slog"
    "os"
)

func main() {
    text := slog.New(slog.NewTextHandler(os.Stdout, nil))
    js := slog.New(slog.NewJSONHandler(os.Stdout, nil))
    text.Info("login", "user", "ada")
    js.Info("login", "user", "ada")
}

ตรวจสอบอย่างรวดเร็ว

ทดสอบความเข้าใจของคุณเกี่ยวกับตัวจัดการของ slog

สรุป

คุณได้เรียนรู้เกี่ยวกับตัวจัดการของ slog:

  • ตัวจัดการจัดรูปแบบและเขียนระเบียน ส่วนตัวบันทึกเป็นผู้เรียกใช้
  • NewTextHandler สำหรับมนุษย์ และ NewJSONHandler สำหรับเครื่อง
  • ตัวจัดการรับ io.Writer และ *HandlerOptions ใด ๆ ก็ได้
  • slog.SetDefault เชื่อมฟังก์ชันระดับแพ็กเกจเข้าด้วยกัน

คำถามที่พบบ่อย

บทเรียน “ตัวจัดการ slog” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ตัวจัดการ slog” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ตัวจัดการ slog”

ตัวจัดการข้อความและ JSON คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “ตัวจัดการ slog” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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