محلل ملفات السجل
Log Analyzer
محلل ملفات السجل — Log Analyzer
في هذا التطبيق الموجّه، ستبني محلل سجلات حقيقياً من الصفر. السجلات (Logs) هي الشريان الذي يُخبر المطوّر بكل ما يحدث في تطبيقه — متى نجحت العمليات، متى وقعت أخطاء، ومن الذي استخدم النظام.
ستستخدم معاً: Counter لعدّ مستويات الخطورة، datetime لفلترة السجلات حسب النطاق الزمني، وpathlib لكتابة تقرير الملخّص.
البيانات — السجلات الخام
هذه هي بيانات الإدخال التي سنعمل عليها طوال التطبيق. كل سطر يمثّل حدثاً واحداً بتنسيق ثابت: [التاريخ والوقت] LEVEL: الرسالة
2024-03-15 08:01:23 INFO: بدأ التطبيق بنجاح
2024-03-15 08:01:25 INFO: اتصال بقاعدة البيانات نجح
2024-03-15 08:03:10 DEBUG: طلب جديد من 192.168.1.1
2024-03-15 08:05:44 INFO: تسجيل دخول ناجح للمستخدم [email protected]
2024-03-15 08:07:02 WARNING: محاولة دخول فاشلة ثلاث مرات
2024-03-15 08:09:18 ERROR: فشل الاتصال بخادم البريد
2024-03-15 08:12:30 INFO: تم معالجة 50 طلب بنجاح
2024-03-15 08:15:05 WARNING: استخدام الذاكرة تجاوز 80%
2024-03-15 08:18:22 INFO: تم إرسال 20 بريد إلكتروني
2024-03-15 08:20:40 ERROR: خطأ في قاعدة البيانات: connection timeout
2024-03-15 08:22:15 CRITICAL: انقطع الاتصال بالخادم الرئيسي
2024-03-15 08:25:00 INFO: تم استعادة الاتصال بالخادم
2024-03-15 09:00:00 INFO: بدأ المهمة المجدولة اليومية
2024-03-15 09:05:33 WARNING: ملف السجل يقترب من الحجم الأقصى
2024-03-15 09:10:00 INFO: انتهت المهمة المجدولة بنجاح
الخطوة 1 — تحميل وتحليل السجلات
أول مهمة: تحويل هذا النص الخام إلى قائمة من القواميس المنظمة. كل سطر يُحلَّل إلى: وقت، مستوى، رسالة.
الخطوة 2 — عدّ مستويات الخطورة
الآن بعد أن صارت السجلات منظمة، نستخدم Counter لمعرفة توزيع مستويات الخطورة دفعة واحدة:
الخطوة 3 — استخراج التواقيت وفلترة نطاق زمني
السجلات كثيرة. في الواقع العملي نريد غالباً رؤية سجلات الساعة الأخيرة فقط — أو نطاق زمني محدد:
الخطوة 4 — كتابة تقرير ملخّص
الآن ندمج كل شيء: نكتب تقريراً نصياً إلى /tmp باستخدام pathlib:
الخطوة 5 — خط المعالجة الكامل
الآن ندمج كل الخطوات في دالة واحدة منظمة — هذا هو النمط الذي ترى في قواعد كود حقيقية:
ما تعلّمته في هذا التطبيق
لاحظ كيف تكاملت الأدوات الثلاث بشكل طبيعي:
datetime.strptimeحوّل النص الخام إلى كائنات قابلة للمقارنة والفلترةCounterأعطانا توزيع المستويات بسطر واحد بدلاً من حلقات ومتغيرات عدّpathlib.Path.write_textكتبت التقرير بأناقة دون الحاجة لفتح/إغلاق يدوي
هذا هو قلب “batteries-included” في Python — كل أداة تحل مشكلتها بدقة، وتتكامل مع الأخريات بسلاسة لبناء أنظمة أكبر.