مراقبة وتسجيل PHP: دليلك لاكتشاف الأخطاء قبل المستخدمين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تطبيقك صامت؟ هذه علامة خطيرة

\n\n

هل سبق لك أن عرفت بوجود خطأ في الإنتاج (Production) من مستخدم غاضب؟ إذا كان الجواب نعم، فأنت تعلم كم هذا مؤلم. إذا كان لا، فأنت محظوظ (حتى الآن).

\n\n

PHP هي اللغة التي تعمل على 78% من جميع مواقع الويب في العالم. لكن لديها ميزة غريبة: إنها "هادئة" جدًا. افتراضيًا، تبتلع PHP الأخطاء بصمت، أو تعرض صفحة بيضاء، أو الأسوأ من ذلك، تستمر في العمل ببيانات خاطئة. بدون نظام مراقبة وتسجيل، أنت أعمى.

\n\n

في هذا المقال، سنشرح كيف تحول تطبيق PHP الخاص بك من "صندوق أسود" إلى نظام شفاف، حيث يتم تسجيل كل خطأ، وكل طلب بطيء، وكل نشاط مشبوه. هيا بنا!

\n\n

لماذا "echo $error" ليس تسجيلًا؟

\n\n

كثير من المطورين المبتدئين يكتبون:

\n\n
try {\n    // بعض الكود\n} catch (Exception $e) {\n    echo $e->getMessage();\n}\n
\n\n

هذا ليس تسجيلًا. هذا صراخ في الفراغ. الطباعة في المتصفح لا تُحفظ، ولا تُنظم، ولا تقدم لك أي تحليلات. التسجيل الحقيقي هو عندما تستطيع:

\n\n
    \n
  • رؤية الخطأ بعد 5 دقائق من حدوثه
  • \n
  • معرفة الخادم والبيئة التي حدث فيها
  • \n
  • تصفية آلاف السجلات والعثور على السجل المطلوب
  • \n
  • تلقي إشعار فوري في Telegram/Slack عند حدوث عطل
  • \n
\n\n

لننتقل إلى الأدوات التي تفعل ذلك.

\n\n

Monolog — المعيار الفعلي لتسجيل PHP

\n\n

إذا كنت تكتب بلغة PHP ولا تستخدم Monolog، فأنت على الأرجح تعيد اختراع العجلة. هذه المكتبة أصبحت المعيار لتسجيل PHP (نعم، Laravel و Symfony تستخدمانها في الخلفية).

\n\n

التثبيت ومثال بسيط

\n\n
composer require monolog/monolog\n
\n\n
<?php\nuse Monolog\\Logger;\nuse Monolog\\Handler\\StreamHandler;\n\n// إنشاء قناة سجلات\n$log = new Logger('my_app');\n// الكتابة إلى ملف /var/log/my_app.log\n$log->pushHandler(new StreamHandler('/var/log/my_app.log', Logger::WARNING));\n\n// الاستخدام\n$log->warning('هذا تحذير');\n$log->error('خطأ حرج: قاعدة البيانات غير متاحة');\n
\n\n

هذا أفضل. لكن Monolog يمكنه فعل المزيد. يمكنك إرسال السجلات إلى أماكن مختلفة في نفس الوقت:

\n\n
    \n
  • إلى ملف — للتصحيح المحلي
  • \n
  • إلى Elasticsearch — للبحث المتقدم
  • \n
  • إلى Telegram/Slack — للإشعارات العاجلة
  • \n
  • إلى Syslog — للإدارة النظامية
  • \n
\n\n

مثال متقدم مع معالجات متعددة

\n\n
<?php\nuse Monolog\\Logger;\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Handler\\TelegramBotHandler;\nuse Monolog\\Handler\\ElasticsearchHandler;\nuse Monolog\\Formatter\\LineFormatter;\n\n$log = new Logger('production');\n\n// كل الأخطاء تُكتب في ملف\n$fileHandler = new StreamHandler('/var/log/app.log', Logger::DEBUG);\n$log->pushHandler($fileHandler);\n\n// الأخطاء الحرجة تُرسل فورًا إلى Telegram\n$telegramHandler = new TelegramBotHandler(\n    'YOUR_BOT_TOKEN', \n    'YOUR_CHAT_ID', \n    Logger::CRITICAL\n);\n$telegramHandler->setFormatter(new LineFormatter(\n    "[%datetime%] %channel%.%level_name%: %message% %context%\\n"\n));\n$log->pushHandler($telegramHandler);\n\n// التسجيل\n$log->critical('قاعدة البيانات تعطلت', ['server' => gethostname()]);\n
\n\n

الآن، إذا تعطلت قاعدة البيانات ليلاً، ستعرف فورًا من خلال إشعار على هاتفك. وليس في الصباح من عميل غاضب.

\n\n

Sentry — مراقبة الأخطاء مع السياق

\n\n

Monolog ممتاز في كتابة السجلات، لكن عندما تكثر الأخطاء، مجرد قراءة الملفات يصبح جحيمًا. هنا يأتي دور Sentry — نظام جمع الأخطاء مع واجهة ويب.

\n\n

Sentry يجمع تلقائيًا:

\n
    \n
  • تتبع الاستدعاءات (Stack Trace)
  • \n
  • بيانات الطلب (URL، الترويسات، المحتوى)
  • \n
  • معلومات المستخدم (إذا تم تمريرها)
  • \n
  • حالة المتغيرات

المدونات

توصيات الكتب