2010-06-19 19 views
7

पर रणनीतियां मैं एक बड़ा जावास्क्रिप्ट सॉफ्टवेयर लिख रहा हूं। ब्राउज़रों में प्रदर्शन और पोर्टेबिलिटी बनाए रखने के दौरान, मुझे कॉल का पता लगाने, ईवेंट लॉग इन करने, क्रियाओं को डीबग करने की आवश्यकता है।जावास्क्रिप्ट console.log/trace, आदि

वेबकिट और फायरबग दोनों ट्रेस(), लॉग(), त्रुटि(), चेतावनी() इत्यादि जैसी विधियों के साथ कंसोल ऑब्जेक्ट प्रदान करते हैं। वे बहुत अच्छे हैं, लेकिन ब्राउजर आईई या ओपेरा होने पर मैं क्या करूँ?

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

MyNamespace.Console = {}; 
MyNamespace.Console.log = function(value) { 
if (console!==undefined) { 
    console.log(value); 
} 
else { 
    // What should I do to log events on other browsers? 
} 
} 

ऊपर तो कोई समस्या नहीं आईई/ओपेरा पर पाए जाते हैं बनाता है, लेकिन मैं IE के साथ कैसे लॉग ऑन करते हैं (एक वास्तव में IE के साथ प्रवेश करने की जरूरत है!)।

इसके अलावा, अगर मैं अपने आवेदन में हर जगह लॉग लगाता हूं, तो क्या यह उत्पादन वातावरण पर चलने पर मुझे धीमा कर देता है? क्या मेरे पास एक स्विच DEBUG चालू/बंद होना चाहिए और लॉग इन करने से पहले एक सरल जांच होनी चाहिए कि यदि DEBUG === सत्य है, तो लॉग करें?

क्लोजर कंपाइलर जैसी प्रणालियों के बारे में क्या, क्या आप उन्हें लॉगिंग हटाने के लिए बना सकते हैं?

उत्पादन वातावरण पर चलते समय कोई त्रुटि होने पर और लॉगिंग नहीं हुई है, तो आप समस्या को डीबग/कैसे ढूंढते हैं? और वास्तव में, क्या आप कभी भी जावास्क्रिप्ट त्रुटि लॉग भेजते हैं (डेवलपर), यह सुनिश्चित करने के लिए कि आपके क्लाइंट में कोई समस्या नहीं है? यह कैसे काम करता है?

मैं जावास्क्रिप्ट के साथ डीबगिंग/लॉगिंग पर किसी भी प्रतिक्रिया/टिप्पणियों की सराहना करता हूं, यह मेरी पहली बार एक विशाल जावास्क्रिप्ट एप्लिकेशन लिख रहा है, और स्पष्ट रूप से, मुझे यकीन नहीं है कि मुझे इसके बारे में क्या करना चाहिए ... जावास्क्रिप्ट में डीबगिंग और लॉगिंग लगता है थोड़ा अधूरा

उत्तर

4

मैं डेवलपर — पर एप्लिकेशन रिपोर्ट लॉग डेटा को कम से कम उपयोगकर्ताओं/ग्राहकों को इसका खुलासा किए बिना कम से कम नहीं करने की अनुशंसा नहीं करता।

अनुराग के सुझावों के बाद त्रुटियों/घटनाओं/डीबगिंग डेटा को सरणी में लॉग इन करना एक सुरक्षित अभ्यास होगा, और फिर समय-समय पर लॉग डेटा को वेब सर्वर पर भेज दें जहां इसे स्थानीय रूप से और साइकिल चलाया जा सके।फिर यदि ग्राहक को समस्याएं आ रही हैं, तो वे स्वयं को डिबगिंग के लिए लॉग खींच सकते हैं और, या तो इसे मैन्युअल रूप से भेज सकते हैं, या स्पष्ट रूप से एप्लिकेशन को लॉग को स्थानांतरित करने के लिए एप्लिकेशन को बता सकते हैं।

कंसोल पर लॉग इन आमतौर पर विकास के दौरान उपयोग किया जाता है। और इसके लिए एक डीबग ध्वज का उपयोग किया जाना चाहिए ताकि यह हर समय चालू नहीं होगा।

3

आप केवल सभी लॉग संदेशों को किसी सरणी या वस्तु में जोड़ सकते हैं। एक वस्तु की तरह दिखाई दे सकता है:

var logMessages = { 
    'log': [], 
    'debug': [], 
    'error': [], 
    ... 
}; 

जहां सरणी उस स्तर के लिए लॉग इन संदेशों का प्रतिनिधित्व करता है, कालक्रम के अनुसार या कुछ अन्य मानदंड का उपयोग कर आदेश दिया।

आप उन ब्राउज़रों के लिए समान इंटरफ़ेस को परिभाषित कर सकते हैं जिनमें console की कमी है। उदाहरण के लिए,

if(!window.console) { 
    var console = {}; 

    console.log = function(msg) { 
     .. 
    }; 

    console.debug = function(msg) { 
     .. 
    }; 

    .. 
} 

संदेशों की सूची एक सर्वर है, जो मैं अनुमान लगा रहा हूँ केवल त्रुटियों के लिए आवश्यक हो सकता है, और संभवतः चेतावनी अप के साथ सिंक किया जा सकता है। और सर्वर के लिए रिपोर्ट

window.onerror = function() { 
    .. 
}; 

कॉलबैक अंदर,: window पर पेज, सेटअप एक कॉलबैक पर सभी त्रुटियों को पकड़ने के लिए। यह ओपेरा के साथ बहुत अच्छी तरह से खेल नहीं सकता है। देखें javascript-global-error-handling

3

समझौते के लिए Google खोज करें रेडबर्ड कंसोल।

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

रेडबर्ड एक ब्राउज़र में ठीक काम करता है जो डिबगिंग कोड के लिए आसान है लेकिन दूसरे में कुछ अलग करता है। अलग-अलग ब्राउज़रों में संदेशों को लॉग और एकत्र करने का एक आम तरीका मतभेदों की पहचान करने में मदद करता है।

आपके द्वारा सुझाए गए डेब्यूग ध्वज का उपयोग करना एक अच्छा विचार है। डीबगिंग संदेशों के बहुत सारे उत्पादन वातावरण में चीजों को धीमा कर सकते हैं। उत्पादन पर्यावरण के लिए एक और विकल्प लॉगिंग फ़ंक्शन को शून्य कार्य के साथ प्रतिस्थापित करना है, यानी कोई ऐसा फ़ंक्शन जो कुछ भी नहीं करता है। यह कोड में DEBUG कथन के बहुत से होने से बचाता है।

संबंधित मुद्दे