0Pricing
C# Academy · บทเรียน

นามธรรมสำหรับการบันทึกเหตุการณ์ และ Debug/Trace

ใช้ System.Diagnostics Debug/Trace เพิ่มตัวรับฟัง และสร้างนามธรรมขนาดเล็กในลักษณะ ILogger เพื่อแยกโค้ดแอปออกจากแหล่งรับข้อมูล

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

เหตุผลที่ต้องบันทึกข้อมูล

เป้าหมาย:

  • ส่งข้อความด้วย ดีบัก และการติดตาม
  • เพิ่มตัวรับฟังเพื่อดูผลลัพธ์
  • สร้างชั้นนามธรรมสำหรับการบันทึกข้อมูลขนาดเล็ก
  • เลือก ระดับ และรูปแบบที่เรียบง่าย

พื้นฐานดีบักและการติดตาม

ดีบักใช้สำหรับการพัฒนา ส่วนการติดตามใช้ได้กับทุกบิลด์ เพิ่ม ConsoleTraceListener เพื่อดูข้อความในแอปคอนโซล

using System;
using System.Diagnostics;

// Demo: show Debug/Trace after adding a ConsoleTraceListener
public class Program
{
  public static void Main(string[] args)
  {
    // By default, console apps may not show Debug/Trace. Add a listener.
    Trace.Listeners.Clear();
    Trace.Listeners.Add(new ConsoleTraceListener());

    Debug.WriteLine("Debug: only in debug builds (often)");
    Trace.WriteLine("Trace: in all builds (commonly)");

    Trace.TraceInformation("Info message");
    Trace.TraceWarning("Warning message");
    Trace.TraceError("Error message");
  }
}

การสาธิต TraceSource

TraceSource ใช้ระบุตัวบันทึกและกรองด้วย SourceLevels จึงเหมาะสำหรับจัดกลุ่มข้อความ

using System;
using System.Diagnostics;

// Demo: TraceSource can group logs by name and level.
public class Program
{
  public static void Main(string[] args)
  {
    var src = new TraceSource("Calc", SourceLevels.Information);
    src.Listeners.Clear();
    src.Listeners.Add(new ConsoleTraceListener());

    src.TraceEvent(TraceEventType.Information, 1001, "Starting");
    src.TraceEvent(TraceEventType.Warning, 1002, "Low precision");
    src.TraceEvent(TraceEventType.Error, 1003, "Divide by zero prevented");
    src.Flush();
    src.Close();
  }
}

การสาธิต ILogger ขนาดเล็ก

อินเทอร์เฟซช่วยแยกผู้เรียกใช้ออกจากปลายทางรับข้อมูล ภายหลังคุณสามารถเพิ่มปลายทางรับข้อมูลที่เป็นไฟล์หรืออยู่ระยะไกลได้โดยไม่ต้องเปลี่ยนจุดเรียกใช้

using System;

// Minimal ILogger-like abstraction for beginners.
public interface ILogger
{
  void Info(string msg);
  void Warn(string msg);
  void Error(string msg);
}

public class ConsoleLogger : ILogger
{
  private readonly string _name;
  public ConsoleLogger(string name) { _name = name; }

  public void Info(string msg)  { Console.WriteLine("[INFO] "  + _name + " - " + msg); }
  public void Warn(string msg)  { Console.WriteLine("[WARN] "  + _name + " - " + msg); }
  public void Error(string msg) { Console.WriteLine("[ERROR] " + _name + " - " + msg); }
}

public class Program
{
  public static void Main(string[] args)
  {
    ILogger log = new ConsoleLogger("Checkout");
    log.Info("Start");
    log.Warn("Slow network");
    log.Error("Payment failed");
  }
}

บริบทและการประทับเวลา

เพิ่มบริบทขนาดเล็ก (คีย์=ค่า) และการประทับเวลา UTC เพื่อให้เชื่อมโยงข้อมูลได้ง่ายขึ้นขณะอ่านบันทึก

using System;

// Add a timestamp and tiny key=value context.
public interface ILogger
{
  void Info(string msg, string contextKey, string contextValue);
}

public class ConsoleLogger : ILogger
{
  private readonly string _name;
  public ConsoleLogger(string name) { _name = name; }

  public void Info(string msg, string key, string value)
  {
    string stamp = DateTime.UtcNow.ToString("u"); // 2009-06-15 13:45:30Z
    Console.WriteLine(stamp + " [INFO] " + _name + " " + key + "=" + value + " :: " + msg);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    ILogger log = new ConsoleLogger("Search");
    log.Info("Query executed", "q", "apple");
    log.Info("Cache miss", "userId", "42");
  }
}

เคล็ดลับและแนวทางที่ดี

เคล็ดลับ:

  • เลือกระดับไม่กี่ระดับ เช่น Info/Warn/Error
  • เพิ่มตัวรับฟังอย่างน้อยหนึ่งตัวสำหรับดีบักและการติดตาม
  • ทำให้ข้อความสั้น และเพิ่มคู่บริบทขนาดเล็ก
  • อย่าบันทึกข้อมูลลับ

เหตุผลที่ต้องใช้ชั้นนามธรรมสำหรับการบันทึกข้อมูล

ตรวจสอบสั้น ๆ: ประโยชน์สำคัญของการใช้ชั้นนามธรรมสำหรับการบันทึกข้อมูล เช่น อินเทอร์เฟซ ILogger คืออะไร

สรุปทบทวน

สรุปทบทวน: ใช้ดีบัก/การติดตามร่วมกับตัวรับฟังเพื่อดูผลลัพธ์ และห่อการเรียกใช้ไว้หลังอินเทอร์เฟซตัวบันทึกขนาดเล็ก เพื่อให้เปลี่ยนปลายทางรับข้อมูลได้โดยไม่ต้องแก้โค้ดทางธุรกิจ

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

บทเรียน “นามธรรมสำหรับการบันทึกเหตุการณ์ และ Debug/Trace” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “นามธรรมสำหรับการบันทึกเหตุการณ์ และ Debug/Trace” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “นามธรรมสำหรับการบันทึกเหตุการณ์ และ Debug/Trace”

ใช้ System.Diagnostics Debug/Trace เพิ่มตัวรับฟัง และสร้างนามธรรมขนาดเล็กในลักษณะ ILogger เพื่อแยกโค้ดแอปออกจากแหล่งรับข้อมูล คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “นามธรรมสำหรับการบันทึกเหตุการณ์ และ Debug/Trace” ใช้เวลานานแค่ไหน

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

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

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

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

  1. นามธรรมสำหรับการบันทึกเหตุการณ์ และ Debug/Trace
  2. พื้นฐานการทำโปรไฟล์และการติดตาม (แนวคิด)
  3. รูปแบบการตรวจสอบและการยืนยันความถูกต้อง
← กลับไปที่ C# Academy