2016-11-29 5 views
6

मेरे पास एक प्रश्न है: मैं अपने नोड ऐप के लिए सभी बेजोड़ अपवाद (संचालन/डेवलपर त्रुटि सभी सेवा नीचे ले जाएगा) को कैसे संभाला जा सकता हूं। फिर जब भी कोई त्रुटि पकड़ती है तो मैं मुझे एक ईमेल अलर्ट भेज सकता हूं।नोड जेएस ऐप के लिए सभी uncaughtException पकड़ें

+0

यू मतलब आपको एक ईमेल जब भी नोड सर्वर क्रैश हो जाता है करना चाहते हैं? – raj

+0

हाँ। मेल भेजें एक त्रुटि संदेश संलग्न करें ताकि मैं जान सकूं कि क्या हुआ। जॉयंट आलेख के लिंक के लिए –

उत्तर

3

आप डोमेन एपीआई का उपयोग कर सकते हैं: https://nodejs.org/api/domain.html लेकिन यह बहिष्कृत है और वैसे भी अनुशंसित नहीं है।

सामान्य रूप से, आप कहीं भी हो सकता है त्रुटियों को संभालना चाहते हैं और "सभी को पकड़ें" दृष्टिकोण से बचें।

यदि कोई त्रुटि होती है, तो इसे अनदेखा करने से इसे ठीक करने के लिए कोई प्रोत्साहन नहीं होता है, और कुछ मामलों में आपको यह भी पता नहीं चल सकता है कि आपका प्रोग्राम खराब है।

इसके बजाए, इसे संभालने का सबसे अच्छा तरीका है कि आपका प्रोग्राम क्रैश हो, क्रैश (और स्टैक/कोर डंप) लॉग करें, फिर pm2 या nodemon का उपयोग करके इसे स्वचालित रूप से पुनरारंभ करें।

Joyent (नोड निर्माता) द्वारा एक (बहुत) लंबे लेकिन व्यावहारिक भाषण के लिए, मैं दृढ़ता से आप इस लिंक को पढ़ने की सलाह देते हैं: Error handling in Node.JS

वहाँ भी एक process.on('uncaughtException') घटना (है कि आप भी उपयोग नहीं करना चाहिए)

है संपादित करें: थोड़ा और विवरण और आपकी समस्या को हल करने का प्रयास। क्रैश पर अपने ऐप को पुनरारंभ करने के लिए pm2 जैसे सॉफ़्टवेयर का उपयोग करके, आप error.log को भी देख पाएंगे, जो आपको स्टैक ट्रेस देगा। तो ऐसा लगता है कि आपको अभी भी एकमात्र चीज है जो दुर्घटना से सतर्क रहना है।

इसके लिए, आप कीमेट्रिक्स जैसे समान इंटरफेस देखना चाहते हैं (वही लोग जिन्होंने pm2 बनाया) जो संभावित रूप से त्रुटियों पर आपको सतर्क कर सकता है।

  • होगा कि आपका ऐप्लिकेशन (री) शुरू होता है, यह एक त्रुटि लॉग
  • यदि यह एक पाता है, यह अलर्ट के लिए लग रहा है:

    एक शांत समाधान मैं एक बार एक लंबे लंबे समय पहले उपयोग किया है, इस प्रकार था आप लॉग फ़ाइल की सामग्री के साथ

  • यह तो नाम बदलता है/एक अलग स्थान

मैं आवश्यक नहीं इस समाधान की सिफारिश करेंगे करने के लिए ले जाने के त्रुटि लॉगफ़ाइल, लेकिन यह सब चश्मा आप की जरूरत फिट बैठता है, तो मजा इसके साथ!

EDIT2: आप सेवा के विकास और सर्वोत्तम प्रथाओं के विषयों में गहराई में जाने पर की तरह लग रहा है, @Paul ने सुझाव दिया उसकी कड़ी टिप्पणी में पर एक नजर है, तो: https://12factor.net/

+0

+1। साथ ही, विशेष रूप से शीर्षक (नहीं) शीर्षक प्रोग्रामर त्रुटियों को नोट करें, जो मुझे लगता है कि ओपी के सवाल के मांस में आता है। – Paul

+1

यह भी ध्यान देने योग्य है कि नोड यूनिक्स सिद्धांत का पालन करता है, जिसका अर्थ है कि प्रत्येक एप्लिकेशन को एक चीज अच्छी तरह से करनी चाहिए। ऐप क्रैश होने पर एक ईमेल चाहते हैं, तो यह आपके ऐप के दायरे से बाहर है। इसके बजाए, आप क्रैश (और लॉग) को @xShirase कहते हैं, और उसके बाद कुछ और है (उदा। Systemd या logwatch) उस पर ध्यान दें और थ्रेसहोल्ड पहुंचने पर ईमेल भेजना (भले ही वह सीमा "कोई त्रुटि" हो)। – Paul

+0

ने अभी भी एक हैक जोड़ा जब मैं अभी भी युवा था और ऐप के भीतर ही ऐसा करने के लिए लापरवाह था :) यूनिक्स सिद्धांत के लिए +1 हालांकि – xShirase

14

आप उपयोग कर सकते हैं process 'uncaughtException' और ' unhandledRejection 'घटनाओं।

भी याद रखें कि यह सुरक्षित, 'uncaughtException' के बाद सामान्य ऑपरेशन फिर से शुरू करने क्योंकि the system becomes corrupted नहीं है:

'uncaughtException' के सही उपयोग आवंटित संसाधनों का तुल्यकालिक सफाई प्रदर्शन करने के लिए है (उदाहरण के लिए फ़ाइल प्रक्रिया को बंद करने से पहले वर्णक, हैंडल, आदि) ।

उदाहरण:

process 
    .on('unhandledRejection', (reason, p) => { 
    console.error(reason, 'Unhandled Rejection at Promise', p); 
    }) 
    .on('uncaughtException', err => { 
    console.error(err, 'Uncaught Exception thrown'); 
    process.exit(1); 
    }); 
+0

कर सकते हैं, लेकिन नहीं करना चाहिए। @ XShirase का जवाब देखें। – Paul

+0

आप सही पॉल हैं। इसके लिए, उदाहरण में मैं त्रुटि को लॉग करने और एप्लिकेशन को अनिर्धारित स्थिति से बचने के लिए प्रोग्राम को बाहर निकालने का सुझाव देता हूं (निकास कोड के साथ! == 0)। – Dario

+0

हाँ, मैंने आपको सही तकनीक का उपयोग करने के लिए +1 किया * यदि * आप uncaughtException मार्ग पर जा रहे हैं, तो मैं बस बढ़ाना चाहता था कि यह सबसे अच्छा मार्ग नहीं है, और ओपी को यह सोचने से हतोत्साहित करता है कि वह आपको क्या करना चाहिए घटना श्रोता में किसी प्रकार का ईमेल प्रेषक एम्बेड करें और फिर एम्बेड करें। – Paul