"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > Node.js अनुप्रयोगों में प्रबंधन और लॉगिंग में त्रुटि

Node.js अनुप्रयोगों में प्रबंधन और लॉगिंग में त्रुटि

2024-11-09 को प्रकाशित
ब्राउज़ करें:845

Error Handling and Logging in Node.js Applications

परिचय

बैकएंड विकास की दुनिया में, लचीले और रखरखाव योग्य अनुप्रयोगों के निर्माण के लिए विश्वसनीय त्रुटि प्रबंधन और संरचित लॉगिंग आवश्यक हैं। Node.js में प्रभावी त्रुटि प्रबंधन न केवल उपयोगकर्ता अनुभव को बेहतर बनाता है बल्कि डिबगिंग को भी सरल बनाता है और एप्लिकेशन मॉनिटरिंग को बढ़ाता है। उचित लॉगिंग के साथ, डेवलपर्स समस्याओं को तेजी से ट्रैक कर सकते हैं और वास्तविक समय में सिस्टम स्वास्थ्य की निगरानी कर सकते हैं। इस लेख में, हम Node.js में त्रुटि प्रबंधन और लॉगिंग रणनीतियों के बारे में जानेंगे जो अनुप्रयोगों को अधिक मजबूत और उत्पादन के लिए तैयार बना सकते हैं।

1. Node.js में त्रुटि प्रबंधन को समझना

Node.js में त्रुटि प्रबंधन की अपनी अनूठी चुनौतियाँ हैं, मुख्य रूप से इसकी अतुल्यकालिक, घटना-संचालित वास्तुकला के कारण। आइए Node.js में प्रभावी त्रुटि प्रबंधन के लिए कुछ प्रमुख अंतरों और सिद्धांतों का पता लगाएं:

  • सिंक्रोनस बनाम एसिंक्रोनस त्रुटियां: सिंक्रोनस त्रुटियां तुरंत होती हैं और पारंपरिक ट्राई-कैच ब्लॉक का उपयोग करके कैप्चर की जा सकती हैं, जबकि एसिंक्रोनस त्रुटियां बाद में होती हैं और अलग-अलग हैंडलिंग की आवश्यकता होती है, जैसे कॉलबैक, वादे, या एसिंक/प्रतीक्षा पैटर्न।
  • एकीकृत त्रुटि-हैंडलिंग रणनीति: कई अतुल्यकालिक संचालन के साथ, एक एकीकृत दृष्टिकोण बनाए रखने से किसी एप्लिकेशन में त्रुटियों को अधिक प्रभावी ढंग से प्रबंधित करने में मदद मिलती है। लगातार त्रुटि प्रबंधन डिबगिंग को सरल बनाता है और यह सुनिश्चित करता है कि त्रुटियां समान रूप से प्रसारित और लॉग की गई हैं।

2. बुनियादी त्रुटि प्रबंधन तकनीक

Node.js त्रुटियों के प्रबंधन के लिए कई तंत्र प्रदान करता है, विशेष रूप से अतुल्यकालिक वर्कफ़्लो में:

  • ट्राई-कैच ब्लॉक्स: ये सिंक्रोनस कोड में त्रुटियों को संभालने के लिए उपयोगी हैं लेकिन एसिंक्रोनस कोड में त्रुटियों को नहीं पकड़ेंगे। उदाहरण के लिए:
  try {
    const data = JSON.parse(jsonString);
  } catch (error) {
    console.error("JSON parsing error:", error);
  }
  • त्रुटि ऑब्जेक्ट: Node.js में त्रुटि ऑब्जेक्ट में स्टैक ट्रेस जैसी महत्वपूर्ण जानकारी होती है, जो डेवलपर्स को मुद्दों को डीबग करने में मदद कर सकती है। कस्टम त्रुटि संदेश स्पष्ट और कार्रवाई योग्य होने चाहिए।

  • वादों और Async/प्रतीक्षा में त्रुटि प्रबंधन:

    • वादे: वादे अस्वीकृतियों को संभालने के लिए .catch() का उपयोग करें।
    fetchData()
      .then(data => console.log(data))
      .catch(error => console.error("Error fetching data:", error));
    
    • Async/Await: एसिंक्रोनस त्रुटि प्रबंधन के लिए ट्राइ-कैच ब्लॉक के अंदर wait कॉल लपेटें।
    async function fetchData() {
      try {
        const data = await someAsyncFunction();
        console.log(data);
      } catch (error) {
        console.error("Error:", error);
      }
    }
    
  • वैश्विक त्रुटि प्रबंधन:

    • अनकॉट अपवाद: अनकॉट अपवादों को पकड़ने के लिए प्रोसेस.ऑन('अनकॉटएक्सेप्शन', कॉलबैक) का उपयोग करें।
    • अनहैंडल रिजेक्शन: अनहैंडल किए गए वादे रिजेक्शन के लिए प्रोसेस.ऑन('अनहैंडल रिजेक्शन', कॉलबैक) का उपयोग करें। यह उत्पादन में रक्षा की एक अंतिम पंक्ति प्रदान करता है, हालांकि आम तौर पर त्रुटियों को उनकी उत्पत्ति के स्थान के करीब ही संभालने की सिफारिश की जाती है।

3. उन्नत त्रुटि प्रबंधन पैटर्न

अधिक स्केलेबल और रखरखाव योग्य त्रुटि प्रबंधन के लिए, ये उन्नत तकनीकें आवश्यक हैं:

  • एक्सप्रेस में मिडलवेयर त्रुटि प्रबंधन: एक्सप्रेस एक अंतर्निहित त्रुटि-हैंडलिंग तंत्र प्रदान करता है जो त्रुटियों को पकड़ता है और उन्हें कस्टम मिडलवेयर में भेजता है।
  app.use((err, req, res, next) => {
    console.error("Error:", err);
    res.status(500).send("Something went wrong!");
  });
  • केंद्रीकृत त्रुटि प्रबंधन: कस्टम त्रुटि प्रतिक्रियाओं और संदेशों को परिभाषित करने के लिए एक केंद्रीकृत त्रुटि-हैंडलिंग मॉड्यूल बनाया जा सकता है, जो त्रुटियों को संभालने का एक मानकीकृत तरीका प्रदान करता है।
  class AppError extends Error {
    constructor(message, statusCode) {
      super(message);
      this.statusCode = statusCode;
      Error.captureStackTrace(this, this.constructor);
    }
  }
  • त्रुटि कोड और वर्गीकरण: त्रुटियों को वर्गीकृत करने के लिए HTTP स्थिति कोड का उपयोग करें (क्लाइंट त्रुटियों के लिए 4xx, सर्वर त्रुटियों के लिए 5xx), और अधिक विस्तृत लॉगिंग और त्रुटि ट्रैकिंग के लिए कस्टम कोड जोड़ें।

4. Node.js में लॉगिंग लागू करना

लॉगिंग किसी एप्लिकेशन के भीतर क्या हो रहा है, इसकी जानकारी प्रदान करता है और बग्स को ट्रैक करने के लिए अमूल्य हो सकता है। Node.js में प्रभावी लॉगिंग लागू करने का तरीका यहां बताया गया है:

  • बेसिक कंसोल लॉगिंग:
    कंसोल ऑब्जेक्ट (कंसोल.लॉग, कंसोल.एरर, आदि) सुविधाजनक है लेकिन उत्पादन में सीमित है। संरचित, स्तर-आधारित लॉगिंग के लिए, एक समर्पित लॉगिंग लाइब्रेरी का उपयोग करना बेहतर है।

  • लॉगिंग के लिए विंस्टन का उपयोग करना:
    विंस्टन एक शक्तिशाली लॉगिंग लाइब्रेरी है जो जानकारी, चेतावनी, त्रुटि और डीबग जैसे स्तरों के साथ संरचित लॉगिंग प्रदान करती है।

  const winston = require("winston");

  const logger = winston.createLogger({
    level: "info",
    format: winston.format.json(),
    transports: [
      new winston.transports.File({ filename: "error.log", level: "error" }),
      new winston.transports.Console({ format: winston.format.simple() })
    ]
  });
  • लॉग स्तर:

    • जानकारी: एप्लिकेशन व्यवहार के बारे में सामान्य जानकारी।
    • चेतावनी: चेतावनियाँ, आम तौर पर गैर-ब्रेकिंग लेकिन उल्लेखनीय घटनाएं।
    • त्रुटि: गंभीर मुद्दे जिन पर तत्काल ध्यान देने की आवश्यकता है।
    • डिबग: डिबगिंग के लिए उपयोगी विस्तृत जानकारी।
  • घूमने वाले लॉग:

    लॉग रोटेशन लॉग फ़ाइल आकार को सीमित करता है और कुशल भंडारण सुनिश्चित करता है। विंस्टन का विंस्टन-डेली-रोटेट-फ़ाइल ट्रांसपोर्ट प्रतिदिन के आधार पर लॉग प्रबंधित करने में मदद कर सकता है।

5. उत्पादन में त्रुटि और लॉग प्रबंधन

उत्पादन में त्रुटियों और लॉग को प्रबंधित करने के लिए प्रदर्शन और डेटा सुरक्षा बनाए रखने के लिए अतिरिक्त विचारों की आवश्यकता होती है।

  • लॉगिंग सेवाओं का उपयोग करना:
    केंद्रीकृत लॉग प्रबंधन के लिए Loggly, Papertrail, या ELK Stack (Elasticsearch, Logstash, Kibana) जैसी सेवाओं को एकीकृत करें। ये उपकरण उत्पादन समस्याओं का त्वरित निवारण करने के लिए शक्तिशाली खोज और फ़िल्टरिंग विकल्प प्रदान करते हैं।

  • प्रदर्शन संबंधी विचार:
    लॉगिंग प्रदर्शन को प्रभावित कर सकती है, इसलिए अत्यधिक लॉगिंग से बचें, खासकर उच्च-ट्रैफ़िक अनुप्रयोगों में। विकास (डीबग) और उत्पादन (जानकारी या त्रुटि) के लिए अलग-अलग लॉग स्तर सेट करने पर विचार करें।

  • लॉग सुरक्षित करना:
    संवेदनशील जानकारी के लीक को रोकने के लिए, संवेदनशील डेटा को लॉग करने से बचें, या उपयोगकर्ता की जानकारी को गुमनाम करने के लिए मास्किंग तकनीकों का उपयोग करें।

6. वास्तविक दुनिया के उदाहरण

  • ई-कॉमर्स एप्लिकेशन: एक ई-कॉमर्स एप्लिकेशन के लिए, उपयोगकर्ता कार्यों को लॉग करना और चेकआउट प्रक्रिया में त्रुटियों की निगरानी करना उपयोगकर्ता के व्यवहार और रूपांतरणों को रोकने वाले मुद्दों के बारे में जानकारी प्रदान कर सकता है।
  • संरचित लॉगिंग के साथ REST एपीआई: संरचित लॉगिंग का उपयोग करने वाला एक REST एपीआई अनुरोध विवरण, त्रुटियों और उपयोगकर्ता पहुंच को ट्रैक कर सकता है, जिससे सिस्टम विश्वसनीयता बनाए रखने में मदद मिलती है।

निष्कर्ष

संक्षेप में, Node.js में एक अच्छी तरह से डिज़ाइन की गई त्रुटि-हैंडलिंग और लॉगिंग रणनीति लचीले और रखरखाव योग्य अनुप्रयोगों के निर्माण के लिए महत्वपूर्ण है। प्रभावी त्रुटि प्रबंधन और संरचित लॉगिंग डेवलपर्स को अनुप्रयोगों की निगरानी, ​​समस्या निवारण और अनुकूलन करने की अनुमति देती है, जिससे यह सुनिश्चित होता है कि वे त्रुटियों को शालीनता से संभालने और एप्लिकेशन स्वास्थ्य पर नज़र रखने के लिए तैयार हैं। इन तकनीकों को चल रही निगरानी के साथ जोड़कर, आपके पास उत्पादन के लिए एक अधिक विश्वसनीय प्रणाली तैयार होगी।

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/divine_nnanna2/error-handling-and-logging-in-nodejs-applications-1k2a?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3