إتقان تحليل ملفات السجل باستخدام العبارات العادية
في C#
يمكن أن تكون عملية تحليل ملفات السجل مهمة شاقة، خاصة عند التعامل مع إدخالات سجل متعددة السطور. إذا كنت تستخدم برامج تسجيل مثل log4php أو log4net أو log4j، فقد تواجه تحدي استخراج المعلومات ذات الصلة أثناء التعامل مع رسائل السجل التي تمتد على عدة أسطر. في هذه التدوينة، سنتناول هذه المشكلة ونرشدك خلال إنشاء تعبير عادي فعال لتحليل ملفات السجل الخاصة بك.
المشكلة: رسائل السجل متعددة السطور
عند العمل مع ملفات السجل، يجد العديد من المطورين أن رسائل السجل قد لا تكون دائمًا محصورة في سطر واحد فقط. على سبيل المثال، انظر إلى إدخال سجل يحتوي على رسائل منتشرة على عدة أسطر. التحدي الأول هو التقاط هذه الإدخالات بدقة دون فقدان المعلومات المهمة.
إليك مثال على تنسيق السجل الذي سنعمل معه:
07/23/08 14:17:31,321 سجل
رسالة
تمتد
على
عدة
أسطر
07/23/08 14:17:31,321 سجل رسالة في سطر واحد
في هذه الحالة، قد يلتقط التعريف الحالي الخاص بك السطر الأول فقط أو يحاول التقاط كل شيء دفعة واحدة، وهو أمر غير مثالي.
الحل: تحسين التعبير العادي
لإنشاء تعبير عادي يلتقط بفعالية كل إدخال سجل، بما في ذلك تلك التي تمتد على عدة أسطر، يمكننا تحسين نهجنا الأولي. إليك الخطوات لتحقيق ذلك:
الخطوة 1: استخدام RegexOptions.MultiLine
أولاً وقبل كل شيء، تأكد من أنك تستخدم علامة RegexOptions.MultiLine
. تسمح هذه العلامة للتعبير العادي بالتعامل مع كل سطر من نصك كجزء من المطابقة، مما يمكّنه من العمل بفعالية مع رسائل السجل متعددة السطور.
الخطوة 2: تعديل التعبير العادي الخاص بك
إليك نسخة أكثر قوة من التعبير العادي التي تتناول بشكل خاص التقاط الرسائل متعددة السطور دون مطابقة خاطئة لأسطر تبدأ بتاريخ:
(?<date>\d{2}/\d{2}/\d{2})\s(?<time>\d{2}:\d{2}:\d{2},\d{3})\s(?<message>(.|\n)*(?!(\d{2}/\d{2}/\d{2}\s\d{2}:\d{2}:\d{2},\d{3})))
شرح مكونات التعبير العادي
(?<date>\d{2}/\d{2}/\d{2})
: يلتقط هذا التاريخ بالتنسيق ‘MM/DD/YY’.\s
: يتطابق مع المسافات البيضاء بعد التاريخ.(?<time>\d{2}:\d{2}:\d{2},\d{3})
: يلتقط الوقت بتنسيق ‘HH:MM:SS,mmm’.(?<message>(.|\n)*...)
:- يمثل هذا الجزء كل ما يلي، متطابقًا مع أي حرف بما في ذلك الأسطر الجديدة.
(?!(\d{2}/\d{2}/\d{2}\s\d{2}:\d{2}:\d{2},\d{3}))
: تؤكد هذه العبارة السلبية أن الرسالة الملتقطة لا تتضمن زيفًا بداية إدخال سجل آخر.
أفكار نهائية
من خلال تنفيذ التعديلات التي ناقشناها، يمكنك تحليل ملفات السجل بفعالية، حتى عندما تمتد رسائل السجل على عدة أسطر. تذكّر أن تختبر التعبير العادي الخاص بك بعناية مع إدخالات سجل متنوعة لضمان تصرفه كما هو متوقع.
مع هذه المعرفة، يجب أن تكون مجهزًا جيدًا لمواجهة تحديات تحليل ملفات السجل بشكل مباشر باستخدام العبارات العادية
في C#. برمجة سعيدة!