تسجيل السجلات في C# (.NET): نظرة عامة على أفضل الحلول

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تسجيل السجلات في C# (.NET): نظرة عامة على أفضل الحلول



تسجيل السجلات ليس مجرد تسجيل للأخطاء. إنها أداة أساسية لمراقبة حالة التطبيق، وتدقيق إجراءات المستخدمين، وتصحيح الأخطاء في بيئة الإنتاج. في نظام C# (.NET)، توجد عدة مكتبات ناضجة، كل منها يحل مشكلة تسجيل السجلات بطريقته الخاصة. في هذه المقالة، سنستعرض الحلول الأكثر شيوعًا: NLog و Serilog و log4net والمكتبة المدمجة Microsoft.Extensions.Logging.



1. Microsoft.Extensions.Logging (ILogger المدمج)

بدءًا من .NET Core، توفر Microsoft تجريدًا لتسجيل السجلات — واجهة ILogger<T> ومصنع ILoggerFactory. هذه ليست مكتبة كاملة، بل عقد يمكن ربط أي تطبيق به (NLog، Serilog، إلخ).

الإيجابيات: مدمج في ASP.NET Core، لا يتطلب تبعيات إضافية لتسجيل السجلات الأساسي، ويمكن استبداله بسهولة بمكتبة أخرى.

السلبيات: وظائف محدودة "خارج الصندوق" (فقط المستويات: Trace، Debug، Information، Warning، Error، Critical). لا توجد بيانات منظمة.

مثال على الاستخدام:

using Microsoft.Extensions.Logging;

public class OrderService{ private readonly ILogger<OrderService> _logger;

public OrderService(ILogger<OrderService> logger) { _logger = logger; }

public void ProcessOrder(int orderId) { _logger.LogInformation("معالجة الطلب {OrderId}", orderId); try { // منطق المعالجة } catch (Exception ex) { _logger.LogError(ex, "خطأ أثناء معالجة الطلب {OrderId}", orderId); } }}


2. Serilog (تسجيل السجلات المنظم)

Serilog هو الرائد في المرونة والشعبية. ميزته الرئيسية هي تسجيل السجلات المنظم. بدلاً من الرسائل النصية، تقوم بتمرير كائنات يتم تسلسلها تلقائيًا إلى JSON أو تنسيق آخر. هذا يسمح بتحليل السجلات بسهولة عبر Elasticsearch أو Seq أو Grafana.

الإيجابيات: تكامل ممتاز مع .NET، ومُثريات قوية (إثراء السياق)، ودعم لمخرجات (إخراج إلى ملف، قاعدة بيانات، وحدة تحكم، خدمات سحابية).

السلبيات: قد يكون مفرطًا للتطبيقات البسيطة، ويتطلب إعدادًا.

مثال على الإعداد والاستخدام:

using Serilog;

// الإعداد في Program.csLog.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Console() .WriteTo.File("logs/myapp-.log", rollingInterval: RollingInterval.Day) .WriteTo.Seq("http://localhost:5341") .Enrich.WithProperty("Application", "MyApp") .CreateLogger();

try{ Log.Information("بدء تشغيل التطبيق"); var user = new { Id = 1, Name = "إيفان" }; Log.Information("المستخدم {User} قام بتسجيل الدخول", user);}catch (Exception ex){ Log.Fatal(ex, "خطأ حرج");}finally{ Log.CloseAndFlush();}


3. NLog (الأداء والمرونة)

NLog هو إطار عمل قوي آخر ذو تاريخ غني. يشتهر بأدائه ودعمه لقواعد التوجيه المعقدة. يمكن تعيين التكوين إما في ملف XML (nlog.config) أو برمجيًا.

الإيجابيات: سريع جدًا، يدعم تسجيل السجلات غير المتزامن، يمكنه إرسال السجلات عبر البريد الإلكتروني، إلى قواعد البيانات، إلى EventLog. دعم ممتاز لـ .NET Framework و .NET Core.

السلبيات: قد يبدو بناء جملة تكوين XML مرهقًا.

مثال على تكوين nlog.config:

<?xml version="1.0" encoding="utf-8" ?><nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  <targets>                    

توصيات