आपका एप्लिकेशन चुप है - यह एक बुरा संकेत है
\n\nक्या आपने कभी किसी गुस्साए यूज़र से प्रोडक्शन में बग के बारे में सुना है? अगर हाँ - तो आप जानते हैं कि यह कितना दर्दनाक होता है। अगर नहीं - तो आप भाग्यशाली हैं (अभी के लिए)।
\n\nPHP एक ऐसी भाषा है जो दुनिया की 78% वेबसाइटों पर चलती है। लेकिन इसकी एक खासियत है: यह बहुत 'शांत' है। डिफ़ॉल्ट रूप से, PHP बस एरर को निगल जाएगा, एक सफेद पेज दिखाएगा, या इससे भी बदतर, गलत डेटा के साथ काम करता रहेगा। मॉनिटरिंग और लॉगिंग सिस्टम के बिना, आप अंधे हैं।
\n\nइस लेख में, हम सीखेंगे कि कैसे अपने PHP एप्लिकेशन को 'ब्लैक बॉक्स' से एक पारदर्शी सिस्टम में बदलें, जहाँ हर एरर, हर धीमा रिक्वेस्ट और हर संदिग्ध एक्टिविटी रिकॉर्ड हो। चलिए शुरू करते हैं!
\n\n'echo $error' लॉगिंग क्यों नहीं है?
\n\nकई नए डेवलपर ऐसा लिखते हैं:
\n\ntry {\n // कुछ कोड\n} catch (Exception $e) {\n echo $e->getMessage();\n}\n\n\nयह लॉगिंग नहीं है। यह खालीपन में चिल्लाना है। ब्राउज़र में आउटपुट सेव नहीं होता, स्ट्रक्चर्ड नहीं होता, और आपको कोई एनालिटिक्स नहीं देता। असली लॉगिंग वह है जहाँ आप:
\n\n- \n
- एरर होने के 5 मिनट बाद उसे देख सकें \n
- समझ सकें कि यह किस सर्वर और किस एनवायरनमेंट में हुआ \n
- हजारों एंट्रीज़ को फ़िल्टर करके सही वाली ढूंढ सकें \n
- Telegram/Slack पर नोटिफिकेशन पाएँ अगर कुछ टूटा है \n
चलिए अब उन टूल्स पर आते हैं जो यह सब कर सकते हैं।
\n\nMonolog - PHP के लिए डी-फैक्टो स्टैंडर्ड
\n\nअगर आप PHP में लिखते हैं और Monolog का उपयोग नहीं करते, तो संभवतः आप पहिया का पुनः आविष्कार कर रहे हैं। यह लाइब्रेरी PHP में लॉगिंग का मानक बन गई है (हाँ, Laravel और Symfony भी इसे अंदरूनी रूप से उपयोग करते हैं)।
\n\nइंस्टॉलेशन और सबसे आसान उदाहरण
\n\ncomposer 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<?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\nSentry - कॉन्टेक्स्ट के साथ एरर मॉनिटरिंग
\n\nMonolog लॉग लिखने में बहुत अच्छा है, लेकिन जब एरर बहुत हो जाते हैं, तो सिर्फ फ़ाइलें पढ़ना एक नरक है। यहाँ Sentry मदद करता है - एक वेब इंटरफ़ेस के साथ एरर कलेक्शन सिस्टम।
\n\nSentry अपने आप कलेक्ट करता है:
\n- \n
- स्टैक ट्रेस (stack trace) \n
- रिक्वेस्ट डेटा (URL, हेडर, बॉडी) \n
- यूज़र की जानकारी (अगर दी गई है) \n
- वेरिएबल्स की स्थिति