นามธรรมสำหรับการบันทึกเหตุการณ์ และ 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
- เพิ่มตัวรับฟังอย่างน้อยหนึ่งตัวสำหรับดีบักและการติดตาม
- ทำให้ข้อความสั้น และเพิ่มคู่บริบทขนาดเล็ก
- อย่าบันทึกข้อมูลลับ
เหตุผลที่ต้องใช้ชั้นนามธรรมสำหรับการบันทึกข้อมูล
สรุปทบทวน
สรุปทบทวน: ใช้ดีบัก/การติดตามร่วมกับตัวรับฟังเพื่อดูผลลัพธ์ และห่อการเรียกใช้ไว้หลังอินเทอร์เฟซตัวบันทึกขนาดเล็ก เพื่อให้เปลี่ยนปลายทางรับข้อมูลได้โดยไม่ต้องแก้โค้ดทางธุรกิจ
คำถามที่พบบ่อย
บทเรียน “นามธรรมสำหรับการบันทึกเหตุการณ์ และ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- นามธรรมสำหรับการบันทึกเหตุการณ์ และ Debug/Trace
- พื้นฐานการทำโปรไฟล์และการติดตาม (แนวคิด)
- รูปแบบการตรวจสอบและการยืนยันความถูกต้อง