PHP एप्लिकेशन मॉनिटरिंग और लॉगिंग: बग को कैसे न चूकें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

आपका एप्लिकेशन चुप है - यह एक बुरा संकेत है

\n\n

क्या आपने कभी किसी गुस्साए यूज़र से प्रोडक्शन में बग के बारे में सुना है? अगर हाँ - तो आप जानते हैं कि यह कितना दर्दनाक होता है। अगर नहीं - तो आप भाग्यशाली हैं (अभी के लिए)।

\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
  • वेरिएबल्स की स्थिति

ब्लॉग

पुस्तक अनुशंसाएँ