परिचय: आपके TypeScript प्रोजेक्ट को निगरानी और लॉगिंग की आवश्यकता क्यों है
\n\nएक स्थिति की कल्पना करें: आपने TypeScript पर एक शानदार सेवा लॉन्च की। सब कुछ पूरी तरह से काम कर रहा है... जब तक कि उपयोगकर्ता का पहला कॉल न आए: "साइट धीमी है!" या "डेटा सेव नहीं हो रहा है!" आप कोड में जाते हैं, लेकिन बग को दोहरा नहीं पाते। परिचित लगता है?
\n\nTypeScript हमें शक्तिशाली स्थैतिक टाइपिंग देता है, लेकिन यह तार्किक त्रुटियों, मेमोरी लीक या रनटाइम में अप्रत्याशित अपवादों से रक्षा नहीं करता। यहीं पर निगरानी और लॉगिंग काम आते हैं। ये सिर्फ चेकलिस्ट में एक "टिक" नहीं हैं, बल्कि डेवलपर के लिए एक वास्तविक जीवन रक्षक हैं।
\n\nइस लेख में, हम देखेंगे कि TypeScript अनुप्रयोगों (बैकएंड पर Node.js के साथ और फ्रंटएंड दोनों पर) में निगरानी और लॉगिंग को ठीक से कैसे सेट अप करें, कौन से उपकरण चुनें और लॉग के समुद्र में कैसे न डूबें। चलिए शुरू करते हैं!
\n\nइसकी आवश्यकता क्यों है? तीन मुख्य कारण
\n\n1. रीयल-टाइम डिबगिंग
\nलॉगिंग आपको चल रहे एप्लिकेशन के अंदर झाँकने की अनुमति देता है। अनुमान लगाने के बजाय, आप वेरिएबल के विशिष्ट मान, कॉल स्टैक और घटनाओं का क्रम देखते हैं।
\n\n2. प्रदर्शन
\nTypeScript अनुप्रयोगों की निगरानी उन "भारी" फ़ंक्शनों को ट्रैक करने में मदद करती है जो UI को धीमा करते हैं या मेमोरी को रोकते हैं। आप देखेंगे कि एप्लिकेशन सबसे अधिक समय कहाँ खर्च कर रहा है।
\n\n3. सुरक्षा और ऑडिट
\nलॉग पहली चीज़ है जो आप किसी घटना की जाँच करते समय दिखाएंगे। किसने, कब और कौन सा डेटा अनुरोध किया? सही लॉग आपकी प्रतिष्ठा बचाएगा।
\n\nTypeScript में निगरानी और लॉगिंग के लिए उपकरण
\n\nआइए देखें कि प्रोडक्शन में वास्तव में क्या उपयोग किया जाता है। उपकरण का चुनाव इस बात पर निर्भर करता है कि आप क्या लिख रहे हैं: Node.js पर बैकएंड या ब्राउज़र में फ्रंटएंड।
\n\nबैकएंड के लिए (Node.js + TypeScript)
\n- \n
- Winston — सबसे लोकप्रिय लॉगर। लचीला, ढेर सारे ट्रांसपोर्ट (फ़ाइल, कंसोल, रिमोट सर्वर) के साथ। \n
- Pino — अत्यधिक तेज़, यदि प्रदर्शन महत्वपूर्ण है। \n
- Morgan — HTTP अनुरोधों के लिए (Express के साथ बढ़िया काम करता है)। \n
फ्रंटएंड के लिए (ब्राउज़र TypeScript)
\n- \n
- Sentry — त्रुटि निगरानी का राजा। अपवाद, क्रैश, धीमे अनुरोधों को पकड़ता है। \n
- LogRocket — उपयोगकर्ता सत्र + लॉग रिकॉर्ड करता है। \n
- Datadog / New Relic — एंटरप्राइज़ समाधानों के लिए। \n
TypeScript में लॉगिंग सेट अप करना: चरण-दर-चरण गाइड
\n\nआइए क्लासिक बैकएंड से शुरू करें। हम Winston स्थापित करेंगे — यह TypeScript के साथ पूरी तरह से काम करता है।
\n\nचरण 1: स्थापना और बुनियादी कॉन्फ़िगरेशन
\n\nnpm install winston\nnpm install @types/winston --save-dev\n\nएक फ़ाइल logger.ts बनाएँ:
import winston from 'winston';\n\nconst logger = winston.createLogger({\n level: 'info',\n format: winston.format.combine(\n winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),\n winston.format.errors({ stack: true }),\n winston.format.json()\n ),\n defaultMeta: { service: 'user-service' },\n transports: [\n new winston.transports.File({ filename: 'error.log', level: 'error' }),\n new winston.transports.File({ filename: 'combined.log' }),\n ],\n});\n\nif (process.env.NODE_ENV !== 'production') {\n logger.add(new winston.transports.Console({\n format: winston.format.simple(),\n }));\n}\n\nexport default logger;\n\nअब आप अपने TypeScript कोड में कहीं भी लिख सकते हैं:
\n\nimport logger from './logger';\n\nlogger.info('उपयोगकर्ता सफलतापूर्वक पंजीकृत हुआ', { userId: 123 });\nlogger.error('DB से कनेक्शन में त्रुटि', { error: err.message });\n\nध्यान दें: हम winston.format.errors({ stack: true }) का उपयोग कर रहे हैं। इसका मतलब है कि त्रुटि लॉग करते समय, कॉल स्टैक सहेजा जाएगा — डिबगिंग के लिए सोना।