تسجيل الدخول في C# (.NET): نظرة عامة على أفضل الحلول والمكتبات
تسجيل الدخول ليس مجرد تسجيل رسائل في ملف. في التطوير الحديث باستخدام C# (.NET)، هو أداة قوية للمراقبة، وتصحيح الأخطاء، وتحليل سلوك التطبيق. يتيح تسجيل الدخول المُعد بشكل صحيح العثور السريع على الأخطاء، وتتبع الأداء، وبناء التحليلات. في هذه المقالة، سنستعرض المكتبات الأكثر شيوعًا وفعالية لـ .NET، بالإضافة إلى أفضل الممارسات لاستخدامها.
لماذا تحتاج إلى تسجيل دخول احترافي؟
الأساسي Console.WriteLine أو Debug.Write غير مناسبين لبيئة الإنتاج. توفر أطر العمل الحقيقية لتسجيل الدخول ما يلي:
- مستويات تسجيل الدخول (Trace، Debug، Information، Warning، Error، Critical) — تصفية أهمية الرسائل.
- بيانات منظمة — سجلات بتنسيق JSON يسهل تحليلها (ELK، Splunk).
- مستقبلات متعددة (Sinks/Targets) — الكتابة إلى ملف، وحدة التحكم، قاعدة بيانات، خدمات سحابية (Azure، AWS).
- التكوين — ضبط السلوك دون إعادة ترجمة الكود.
- التزامن غير المتزامن — تقليل التأثير على أداء التطبيق.
أفضل المكتبات لـ .NET
سننظر في أربعة حلول رئيسية تهيمن على نظام .NET البيئي.
1. Serilog — معيار تسجيل الدخول المنظم
Serilog هي المكتبة الأكثر شيوعًا لـ .NET، والتي كانت أول من نشر مفهوم structured logging. بدلاً من لصق السلاسل النصية، تقوم بتمرير قالب ومعاملات، مما يسمح بحفظ البيانات بتنسيق قابل للقراءة آليًا.
الميزات الرئيسية:
- تكامل عميق مع .NET Core / .NET 5+.
- عدد هائل من المستقبلات (Serilog.Sinks.Console، Serilog.Sinks.File، Serilog.Sinks.ElasticSearch).
- دعم Enrichers للإضافة التلقائية للسياق (اسم الجهاز، إصدار التطبيق، ThreadId).
- واجهة برمجة تطبيقات نظيفة وموجزة.
مثال على إعداد واستخدام Serilog:
using Serilog;
// الإعداد في Program.cs (.NET 6+)Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() .WriteTo.Console() .WriteTo.File("logs/app-.log", rollingInterval: RollingInterval.Day) .Enrich.WithMachineName() .CreateLogger();
try{ Log.Information("تم تشغيل التطبيق"); var userId = 123; Log.Information("المستخدم {UserId} قام بتسجيل الدخول", userId); // مثال مع استثناء throw new InvalidOperationException("خطأ اختباري");}catch (Exception ex){ Log.Error(ex, "حدث خطأ حرج في الطريقة {Method}", nameof(Main));}finally{ Log.CloseAndFlush();}2. NLog — مرن وعالي الأداء
NLog هو أحد أقدم أطر العمل، ويتعامل بشكل ممتاز مع الأنظمة عالية التحميل. ميزته الرئيسية هي توجيه القواعد المرن (rules) ودعم الكتابة غير المتزامنة "خارج الصندوق".
الميزات الرئيسية:
- دعم تكوين XML و JSON و code-based.
- دعم مدمج لتدوير السجلات حسب الحجم والوقت.
- قابلية التوسع من خلال الأهداف المخصصة (Targets).
- استهلاك أقل للذاكرة مقارنة بـ Serilog في بعض السيناريوهات.
مثال على إعداد NLog عبر الكود:
using NLog;using NLog.Config;using NLog.Targets;
// إعداد المسجلvar config = new LoggingConfiguration();var consoleTarget = new ConsoleTarget("console");config.AddRule(LogLevel.Info, LogLevel.Fatal, consoleTarget);
var fileTarget = new FileTarget("file"){ FileName = "${basedir}/logs/${shortdate}.log", Layout = "${longdate} | ${level:uppercase=true} | ${message} ${exception:fo