تجريدات التسجيل وDebug/Trace
استخدم Debug/Trace من System.Diagnostics، وأضف المستمعين، وأنشئ تجريدًا صغيرًا بأسلوب ILogger لفصل شيفرة التطبيق عن وجهات التسجيل.
تجريدات التسجيل وDebug/Trace درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 3 دروس في المجموع.
لماذا التسجيل
الهدف:
- إرسال الرسائل باستخدام Debug وTrace
- إضافة مستمعات لرؤية المخرجات
- تقديم تجريد صغير للتسجيل
- اختيار المستويات والتنسيق البسيط
أساسيات Debug وTrace
يُستخدم Debug للتطوير، بينما يُستخدم Trace في أي إصدار. أضف 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");
}
}
السياق والطابع الزمني
أضف سياقًا صغيرًا بصيغة key=value وطابعًا زمنيًا بتوقيت 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 مع المستمعات لرؤية المخرجات، وغلّف الاستدعاءات خلف واجهة مسجّل صغيرة حتى يمكن تغيير وجهات الإخراج من دون تعديل رمز الأعمال.
الأسئلة الشائعة
هل درس «تجريدات التسجيل وDebug/Trace» مجاني؟
نعم — نص درس «تجريدات التسجيل وDebug/Trace» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 3 دروس في المجموع.
ماذا ستتعلم في «تجريدات التسجيل وDebug/Trace»؟
استخدم Debug/Trace من System.Diagnostics، وأضف المستمعين، وأنشئ تجريدًا صغيرًا بأسلوب ILogger لفصل شيفرة التطبيق عن وجهات التسجيل. تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.
كم من الوقت يستغرق درس «تجريدات التسجيل وDebug/Trace»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تجريدات التسجيل وDebug/Trace
- أساسيات تحليل الأداء والتتبعات (مفاهيم)
- أنماط الحواجز والتحقق