تسجيل الأخطاء في تطبيقات PHP: أفضل الممارسات للمبتدئين
\n\nتسجيل الأخطاء هو عملية تسجيل معلومات حول تشغيل التطبيق في ملفات خاصة (سجلات). بالنسبة لمطوري PHP المبتدئين، فإن القدرة على تكوين تسجيل الأخطاء بشكل صحيح لا تقل أهمية عن معرفة بناء الجملة للغة. تساعد السجلات في:
\n- \n
- اكتشاف الأخطاء غير المرئية على الشاشة (مثل بيئة الإنتاج). \n
- تتبع سلوك المستخدمين وأداء النظام. \n
- إجراء تدقيق أمني. \n
- تسريع تصحيح الأخطاء المعقدة. \n
في هذه المقالة، سنستعرض أفضل ممارسات تسجيل الأخطاء في PHP: من الدالة المدمجة error_log() إلى استخدام المكتبات الاحترافية مثل Monolog. ستتعلم كيف لا تثقل الكود، وتختار مستويات التسجيل بشكل صحيح، وتتجنب الأخطاء الشائعة للمبتدئين.
1. الأساسيات: التسجيل المدمج في PHP
\nأبسط طريقة لتسجيل شيء ما في السجل هي استخدام الدالة error_log(). يمكنها إرسال الرسائل إلى سجل النظام، أو إلى ملف محدد، أو إلى البريد الإلكتروني.
مثال على التسجيل الأساسي
\n<?php\n// تسجيل في سجل النظام (syslog)\nerror_log('هذه رسالة خطأ');\n\n// تسجيل في ملف محدد\nerror_log('خطأ في الاتصال بقاعدة البيانات', 3, '/var/log/my_app_errors.log');\n?>\n\nالإيجابيات: لا يتطلب تثبيت مكتبات، يعمل "فوراً".
\nالسلبيات:
\n- \n
- لا مرونة (لا يمكن تغيير تنسيق الإخراج بسهولة). \n
- صعوبة التصفية حسب مستوى الأهمية. \n
- غير مريح عند العمل مع قنوات متعددة (ملف، قاعدة بيانات، Slack). \n
بالنسبة للنصوص البرمجية البسيطة والتعلم، هذا يكفي، ولكن للمشاريع الجادة، يجب استخدام حلول أكثر تقدماً.
\n\n2. مستويات التسجيل: متى وماذا تكتب
\nلكي تكون السجلات مفيدة وليست "ضوضاء"، من المهم تصنيف الرسائل حسب مستوى الخطورة. معيار PSR-3 (الذي سنشرحه أدناه) يقترح 8 مستويات:
\n- \n
- DEBUG — معلومات تصحيح الأخطاء (قيم المتغيرات، وقت التنفيذ). يُستخدم فقط في مرحلة التطوير. \n
- INFO — رسائل إعلامية (تم تسجيل المستخدم، تمت معالجة الطلب). \n
- NOTICE — أحداث عادية ولكنها مهمة (استخدام API قديم). \n
- WARNING — تحذيرات (حدث خطأ ما لكن التطبيق يستمر في العمل، مثل تنسيق إدخال غير صحيح). \n
- ERROR — أخطاء تتطلب تدخلاً (فشل حفظ ملف). \n
- CRITICAL — أخطاء حرجة (مكون رئيسي في النظام غير متاح). \n
- ALERT — يتطلب إجراءً فورياً (اختراق، تعطل قاعدة البيانات). \n
- EMERGENCY — النظام غير قابل للتشغيل. \n
مثال على استخدام المستويات (بدون مكتبات)
\n<?php\nfunction logMessage($level, $message) {\n $logFile = __DIR__ . '/app.log';\n $timestamp = date('Y-m-d H:i:s');\n $formatted = "[{$timestamp}] [{$level}] {$message}" . PHP_EOL;\n file_put_contents($logFile, $formatted, FILE_APPEND);\n}\n\nlogMessage('INFO', 'دخل المستخدم إلى النظام');\nlogMessage('ERROR', 'فشل الاتصال بقاعدة البيانات');\n?>\n\nنصيحة: لا تكتب أبداً كلمات المرور أو الرموز المميزة أو استعلامات SQL الكاملة مع بيانات المستخدمين في السجل — فهذا يشكل تهديداً أمنياً.
\n\n3. PSR-3 و Monolog: النهج الاحترافي
\nPSR-3 هو توصية من PHP-FIG تصف واجهة موحدة لمكتبات تسجيل الأخطاء. أشهر تطبيق لـ PSR-3 هو Monolog. يُستخدم في Laravel و Symfony والعديد من الأطر الأخرى.
\n\nتثبيت Monolog عبر Composer
\ncomposer require monolog/monolog\n\nمثال بسيط مع Monolog
\n<?php\nrequire 'v