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

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

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

ابدأ الدورة

تطبيق PHP الخاص بك لا يتحدث، إنه يصرخ

\n\n

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

\n\n

يرى المستخدمون "500 Internal Server Error"، بينما ترى أنت شاشة سجلات فارغة. هل هذا مألوف؟ إذا لم يكن كذلك، فأنت إما عبقري، أو لم تواجه بعد انهيار خادم إنتاجي في الساعة الثالثة صباحًا.

\n\n

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

\n\n

لماذا التسجيل في PHP ليس مجرد "echo"

\n\n

يعتقد العديد من المبتدئين أن التسجيل هو:

\n\n
echo "هذا خطأ: " . $error;
\n\n

مفسد: هذا لا يعمل في بيئة الإنتاج. سيرى المستخدم هذه "التحفة" على الشاشة. وإذا كان الخطأ قاتلاً، فلن تعلم به أبدًا.

\n\n

التسجيل الحقيقي هو جمع منظم للبيانات يمكن تحليلها والبحث فيها والاستجابة لها في الوقت الفعلي. توفر PHP دوالًا أساسية (error_log(), syslog())، لكن هذا غير كافٍ في العالم الحديث.

\n\n

ماذا يجب أن يحتوي السجل الجيد؟

\n
    \n
  • مستوى الخطورة — DEBUG, INFO, WARNING, ERROR, CRITICAL
  • \n
  • الطابع الزمني — الوقت الدقيق للحدث (يفضل بتوقيت UTC)
  • \n
  • السياق — معرف المستخدم، IP، URL، بيانات الطلب
  • \n
  • تتبع الاستدعاءات — trace الخطأ
  • \n
  • معرف فريد للطلب — لربط جميع سجلات الإجراء الواحد
  • \n
\n\n

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

\n\n

إذا كنت تكتب بلغة PHP ولا تستخدم Monolog، فأنت تضيع وقتك. هذا هو المعيار الفعلي للتسجيل، والذي تدعمه Symfony وLaravel ومعظم الأطر الحديثة.

\n\n

لماذا Monolog رائع؟

\n
    \n
  • معالجات (handlers) مرنة — يمكن الكتابة إلى ملف، قاعدة بيانات، Telegram، Slack، بريد إلكتروني
  • \n
  • مُنسِّقات — JSON, HTML, Syslog
  • \n
  • معالجات (Processors) — تضيف السياق تلقائيًا
  • \n
\n\n

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

\n\n
composer require monolog/monolog
\n\n

والآن لنكتب مسجلاً بسيطًا:

\n\n
<?php\nrequire 'vendor/autoload.php';\n\nuse Monolog\\Logger;\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Handler\\TelegramBotHandler;\nuse Monolog\\Level;\n\n// إنشاء مسجل باسم القناة\n$log = new Logger('my_app');\n\n// الكتابة إلى ملف\n$log->pushHandler(\n    new StreamHandler(__DIR__ . '/logs/app.log', Level::Debug)\n);\n\n// الأخطاء الحرجة — إلى Telegram\n$log->pushHandler(\n    new TelegramBotHandler(\n        'YOUR_BOT_TOKEN',\n        'YOUR_CHAT_ID',\n        Level::Critical\n    )\n);\n\n// الاستخدام\n$log->info('المستخدم سجل الدخول', ['user_id' => 123]);\n$log->error('قاعدة البيانات غير متاحة', ['db_host' => 'localhost']);
\n\n

لاحظ: نستخدم معالجات مختلفة لمستويات مختلفة. يُكتب كل شيء (التصحيح) إلى الملف، بينما يُرسل إلى Telegram فقط الحرجة. هذا يسمح بعدم إغراق الإشعارات، مع عدم تفويت المشكلة الحقيقية.

\n\n

مراقبة PHP: كيف ترى ما هو مخفي

\n\n

التسجيل هو جمع بيانات سلبي. المراقبة هي ملاحظة نشطة وإخطار. إذا أخبرك المستخدم بوجود خطأ، فقد فات الأوان. المراقبة الجيدة ستحذرك قبل أن تؤثر المشكلة على المستخدمين.

\n\n

Sentry — أمر لا غنى عنه لمطور PHP

\n\n

Sentry هو نظام تتبع الأخطاء في الوقت الفعلي. يلتقط الاستثناءات، ويجمع السياق، وتتبع الاستدعاءات، وحتى بيانات الجلسة.

المدونات

توصيات الكتب