सर्वर पर क्लेरिजाइड जावास्क्रिप्ट त्रुटियाँ लॉगिंग [बंद]


97

Im एक ASP.NET साइट पर चल रहा है जहाँ मुझे कुछ जावास्क्रिप्ट त्रुटियाँ खोजने के लिए मैनुअल परीक्षण के साथ समस्या है।

क्या क्लाइंटसाइड पर सभी जावास्क्रिप्ट एरर्स को पकड़ने और उन्हें सर्वर पर यानि ईवेंटलॉग में (Webservice के माध्यम से या ऐसा ही कुछ) लॉग इन करने की संभावना है?


समस्या यह है कि हम जावास्क्रिप्ट यूनिटिंग का उपयोग क्यों नहीं कर रहे हैं क्योंकि साइट / सामग्री में बहुत अधिक लोगों का योगदान है और वे जावास्क्रिप्ट का उपयोग कर रहे हैं। सामग्री हम कुछ भी नहीं है (डेवलपर्स के रूप में) के बारे में परवाह करनी चाहिए, लेकिन कोड में गलतियाँ हैं। इसलिए एक सामान्य समाधान बेहतर होगा।
MADMap

मुझे लगता है कि आप औसत उपयोगकर्ता योगदान का मतलब नहीं है (है कि XSS छेद है) ... लेकिन ... आप शायद अपने जेएस को अलग करने की कोशिश कर सकते हैं / पकड़ सकते हैं ताकि यह कम से कम आपके अपने जेएस को प्रभावित न करे ... बिना जाने साइट की गति, मुझे नहीं पता कि यह मदद करेगा या नहीं ...
माइक स्टोन

सामग्री कंपनी के अन्य टीमों से है, उपयोगकर्ताओं से नहीं, इसलिए यह सुरक्षा-जोखिम नहीं है
MADMap

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

जवाबों:


68

आप ऑनरर ईवेंट के लिए अपना स्वयं का हैंडलर सेट करने का प्रयास कर सकते हैं और सर्वर को जो गलत हुआ, उसे बताने के लिए XMLHttpRequest का उपयोग कर सकते हैं, हालांकि चूंकि यह किसी विनिर्देश का हिस्सा नहीं है, इसलिए समर्थन कुछ परतदार है

जावास्क्रिप्ट त्रुटियों को लॉग करने के लिए XMLHttpRequest का उपयोग करने से एक उदाहरण है :

window.onerror = function(msg, url, line)
{
  var req = new XMLHttpRequest();
  var params = "msg=" + encodeURIComponent(msg) + '&url=' + encodeURIComponent(url) + "&line=" + line;
  req.open("POST", "/scripts/logerror.php");
  req.send(params);
};

मैंने अभी एक सर्वर नियंत्रण जारी किया है जो आपको thecodepage.com/post/JavaScript-Error-Notifications.aspx
गेब्रियल

2
यदि यह हैंडलर में दुर्घटनाग्रस्त हो जाता है तो क्या यह लूप बंद हो जाएगा?
जीन-फिलिप लेक्लेर्क

2
@ जीन-फिलिपेक्लर्क हाँ। और इससे भी बदतर, अगर आप कभी भी एक त्रुटि लूप में आते हैं, तो यह आपके सर्वर के समापन बिंदु को करेगा। आपको एक क्लाइंट को सर्वर से बहुत तेजी से टकराने से रोकने के लिए थ्रॉटलिंग फंक्शन जोड़ना चाहिए। यहाँ इसका एक उदाहरण {Track: js} github.com/TrackJs/Tech-Demo/blob/master/src/TrackJs.Demo/…
टॉड गार्डनर

आप एक टोकन को भी एन्क्रिप्ट कर सकते हैं जिसमें उपयोगकर्ता की आईडी, आईपी, एक छोटा यादृच्छिक स्ट्रिंग (ज्ञात-प्लेनटेक्स्ट हमलों को विफल करने के लिए यदि आपका एन्क्रिप्शन एल्गोरिथ्म तेज लेकिन कमजोर है), और एक टाइमस्टैम्प और पृष्ठ में जेएस चर के रूप में शामिल है। फिर इसे त्रुटि रिपोर्ट के साथ जमा किया जा सकता है और लॉग में संलग्न होने की अनुमति देने से पहले इसकी जांच की जाती है। यह संभावित त्रुटि संदेश प्रामाणिकता साबित करने में मदद करता है और गूंगा DoS हमलों से बचाता है, लेकिन फिर भी अधिक परिष्कृत DoS जिस तरह से थ्रॉटलिंग करेगा, उससे आपको बचाता नहीं है।
मोर्मगिल

यदि आप प्राप्त करते हैं और setIntervalविधि में त्रुटि होती है तो यह बात आपके सर्वर को अभिभूत कर सकती है । वेब पर कई JS त्रुटि रिपोर्टिंग सेवाएँ उपलब्ध हैं। चेकआउट ErrLytics । यह आपको अपनी वेबसाइट पर हर उपयोगकर्ता कार्रवाई का विश्लेषण भी देता है।
विवेक मरकाना

28

संक्षिप्त उत्तर: हां, यह संभव है।

दीर्घ उत्तर: लोगों ने पहले से ही लिखा है कि आप (कम से कम आंशिक रूप से) इस मुद्दे को अपना कोड लिखकर कैसे हल कर सकते हैं। हालाँकि, ध्यान दें कि वहाँ ऐसी सेवाएँ हैं जिनसे लगता है कि जेएस कोड को कई ब्राउज़रों में काम करने की ज़रूरत है। मैंने निम्नलिखित पाया है:

मैं इनमें से किसी भी सेवा के लिए नहीं बोल सकता क्योंकि मैंने उन्हें अभी तक कोशिश नहीं की है।


1
Muscula.com के साथ पंजीकृत है। सेवा बहुत दिलचस्प और एकीकृत और उपयोग में आसान लगती है। जावास्क्रिप्ट लाइब्रेरी github.com/csnover/TraceKit भी है जो क्लाइंट से एक अपवाद जानकारी प्राप्त करने की अनुमति देता है, लेकिन आपको अपना स्वयं का सर्वर साइड लॉगगिन तंत्र विकसित करना होगा। मुझे आश्चर्य है कि अगर Google Analytics के लिए इस्तेमाल किया जा सकता है
मक्सिम कोज़्लेंको

1
trackjs.com भी, और यह ट्रैक करता है कि उपयोगकर्ता और नेटवर्क त्रुटि से पहले क्या कर रहे थे।
टॉड गार्डनर

ऊपर की सूची के अलावा, वहाँ भी है, log4sure.com इसकी मुफ्त और लॉग की वास्तविक समय की निगरानी भी है। आप अपनी कस्टम लॉग टेबल
भाविन

erroralerts.com नहीं मिला
Kiquenet

1

12

मैं सिर्फ एक काम पर एक परियोजना पर जावास्क्रिप्ट त्रुटियों पर लॉगिंग सर्वर साइड त्रुटि लागू किया है। JQuery का उपयोग करके विरासत कोड और नए कोड का मिश्रण है ।

मैं window.onerrorjQuery ईवेंट हैंडलर्स को रैप करने और ऑन करने का एक संयोजन का उपयोग करता हूं और पहले से ही एक एरर हैंडलिंग फंक्शन के साथ काम करता हूं (देखें: जावास्क्रिप्ट एरर ट्रैकिंग: क्यों window.onerror इज़ नॉट इनफ )।

  • window.onerror: IE (और फ़ायरफ़ॉक्स में सबसे त्रुटियों) में सभी गलतियाँ पकड़ता है, लेकिन सफारी और ओपेरा में कुछ भी नहीं करता है।
  • jQuery ईवेंट हैंडलर: सभी ब्राउज़रों में jQuery ईवेंट त्रुटियों को पकड़ता है।
  • jQuery तैयार फ़ंक्शन: सभी ब्राउज़रों में आरंभिक त्रुटियों को पकड़ता है।

एक बार जब मैंने त्रुटि को पकड़ लिया है, तो मैं इसमें कुछ अतिरिक्त गुण (url, ब्राउज़र, आदि) जोड़ देता हूं और फिर इसे अजाक्स कॉल का उपयोग करके सर्वर पर वापस पोस्ट करता हूं।

सर्वर पर मेरा एक छोटा सा पेज है जो सिर्फ पोस्ट किए गए तर्कों को लेता है और उन्हें हमारे सामान्य सर्वर लॉगिंग ढांचे में आउटपुट करता है।

मैं इसके लिए (jQuery प्लगइन के रूप में) कोड खोलना चाहूंगा। अगर किसी को दिलचस्पी है तो मुझे बताएं, इससे मालिकों को समझाने में मदद मिलेगी!


1
कोई भी मौका जो इस कोड को उपलब्ध कराया जाएगा?
ल्यूक

दुर्भाग्य से नहीं :( जैसा कि मैं अब उस कंपनी के लिए काम नहीं कर रहा हूं जहां मैंने उस कोड को बनाया था। लेकिन यह कोड की केवल 100 पंक्तियां थीं, और उपरोक्त विवरणों से दोबारा बनाने के लिए यथोचित रूप से आसान होना चाहिए।
कार्ल

1
यह यहीं है: लोग: webcache.googleusercontent.com/…
डेविन जी रोड

मैंने कोशिश की है कि, लेकिन उदासीनता में jquery को बनाए रखना एक दर्द और खिड़की है। गैरकानूनी खानों के माध्यम से सेवित कोड और जावास्क्रिप्ट के लिए बेकार है
अंकुर अग्रवाल

2

यदि आप Google Analytics का उपयोग करते हैं, तो आप जावास्क्रिप्ट त्रुटियों को Google Analytics इवेंट में लॉग इन कर सकते हैं।

इस ऐप को देखें: http://siteapps.com/app/log_javascript_errors_with_ga-181

आशा करता हूँ की ये काम करेगा।


2
वह लिंक किसी भी अधिक काम नहीं करता है। आपको कम से Google Analytics के साथ जावास्क्रिप्ट त्रुटियों प्रवेश करने के बारे में एक लेख पा सकते हैं developers.google.com/analytics/devguides/collection/...
मार्टिन Omander

0

इसके अलावा, मैं TraceTool उपयोगिता का उपयोग करता हूं , यह जावास्क्रिप्ट समर्थन के साथ आता है और JS निगरानी के लिए बहुत उपयोगी है।


ट्रेसटूल मर चुका है?
किकेनेट

0

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

100% समस्या क्यूज़ को हल नहीं करता है यदि समस्या वेब सर्वर के साथ है जो वेब सेवा की मेजबानी कर रहा है जिससे आप परेशानी में हैं, तो आप एक अन्य विकल्प होगा कि आप मानक पृष्ठ पर क्वेरी स्ट्रिंग के माध्यम से जानकारी भेज सकते हैं, एक विधि ऐसा करना गतिशील रूप से छवि टैग बनाने के माध्यम से होता है (जो तब हटा दिया जाता है) क्योंकि ब्राउज़र एक छवि के स्रोत की कोशिश करेगा और लोड करेगा। यह लगभग क्रॉस-डोमेन जावास्क्रिप्ट कॉल करता है, हालांकि अच्छी तरह से। ध्यान रखें कि यदि किसी ने चित्र बंद कर दिया है तो आप मुसीबत में हैं;)


0

मैं हाल ही में Appfail का उपयोग कर रहा हूं , जो asp.net और JavaScript दोनों त्रुटियों को कैप्चर करता है


0

आप संभावित रूप से कोशिश / कैच से सर्वर पर एक अजाक्स कॉल कर सकते हैं, लेकिन यह संभवतः आपके द्वारा किए जा सकने वाले सर्वश्रेष्ठ के बारे में है।

क्या मैं इसके बजाय जावास्क्रिप्ट यूनिट परीक्षण का सुझाव दे सकता हूं? संभवतः JSUnit के साथ ?


समस्या यह है कि हम जावास्क्रिप्ट यूनिटिंग का उपयोग क्यों नहीं कर रहे हैं क्योंकि साइट / सामग्री में बहुत अधिक लोगों का योगदान है और वे जावास्क्रिप्ट का उपयोग कर रहे हैं (लेकिन इसके बारे में कोई सुराग नहीं है!) इसलिए एक सामान्य समाधान बेहतर होगा।
MADMap
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.