ما هو التسجيل (Logging) في PHP ولماذا هو مطلوب؟
التسجيل هو عملية تسجيل معلومات حول تشغيل التطبيق: الأخطاء، التحذيرات، رسائل التصحيح، وإجراءات المستخدم. في PHP، على عكس Python، لا يوجد مسجل (Logger) مدمج متوافق مع PSR "خارج الصندوق" (على الرغم من وجود دالة error_log()). لذلك، فإن أفضل حل هو استخدام مكتبة Monolog - المعيار الفعلي للتسجيل في مشاريع PHP.
لماذا نقوم بالتسجيل؟
- تصحيح أخطاء الإنتاج (تتبع الأخطاء stack trace)
- مراقبة الأداء
- تدقيق الأمان (عمليات تسجيل الدخول، تغييرات البيانات)
- تحليل سلوك المستخدمين
تثبيت Monolog
يتم التثبيت عبر Composer (المكافئ لـ pip في PHP):
composer require monolog/monologيتطلب التشغيل PHP 8.0+ و Composer 2.x.
الوظائف والإمكانيات الأساسية
يدعم Monolog:
- القنوات (Channels) — مسجلات معزولة لأجزاء مختلفة من التطبيق (مثل 'security', 'database')
- مستويات التسجيل (DEBUG, INFO, WARNING, ERROR, CRITICAL وغيرها)
- المعالجات (Handlers) — أين يتم الكتابة: ملفات، قواعد بيانات، Slack, Telegram, البريد الإلكتروني
- المعالجات الإضافية (Processors) — إثراء الرسائل بالسياق (IP, الوقت, الجلسة)
مثال على الكود
<?phprequire 'vendor/autoload.php';
use Monolog\\Logger;use Monolog\\Handler\\StreamHandler;use Monolog\\Handler\\TelegramBotHandler;use Monolog\\Processor\\WebProcessor;
// إنشاء قناة 'app'$log = new Logger('app');
// معالج للكتابة في ملف$log->pushHandler(new StreamHandler(__DIR__.'/logs/app.log', Logger::WARNING));
// معالج لـ Telegram (اختياري)$telegram = new TelegramBotHandler('YOUR_BOT_TOKEN', 'CHAT_ID', Logger::CRITICAL);$log->pushHandler($telegram);
// معالج إضافي لإضافة IP و User-Agent$log->pushProcessor(new WebProcessor());
// تسجيل$log->info('المستخدم قام بتسجيل الدخول', ['user_id' => 123]);$log->error('خطأ في قاعدة البيانات', ['sql' => 'SELECT * FROM users']);متى يتم الاستخدام
Monolog إلزامي في الحالات التالية:
- أي مشروع تجاري أو مفتوح المصدر على PHP (Symfony, Laravel يستخدمان Monolog افتراضيًا)
- الخدمات المصغرة (Microservices) و APIs — لتتبع الطلبات
- النصوص المجدولة (Cron scripts) والعمال (Workers) — لتتبع تنفيذ المهام
- عند التكامل مع الخدمات الخارجية (سجلات في Graylog, Sentry, Papertrail)
تم اختبار المكتبة في آلاف المشاريع وتدعم أي وسيلة نقل تقريبًا للسجلات. إذا كنت تكتب بلغة PHP — ابدأ مع Monolog.
```