0Pricing
C# Academy · درس

تجريدات التسجيل و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
  • اجعل الرسائل قصيرة، وأضف أزواجًا صغيرة من السياق
  • لا تسجّل الأسرار

لماذا نستخدم تجريدًا للتسجيل

تحقّق سريع: ما الفائدة الرئيسية من استخدام تجريد للتسجيل، مثل واجهة ILogger؟

الخلاصة

الخلاصة: استخدم 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تجريدات التسجيل وDebug/Trace
  2. أساسيات تحليل الأداء والتتبعات (مفاهيم)
  3. أنماط الحواجز والتحقق
← العودة إلى C# Academy