2012-03-04 13 views
17

एक Node.js पैकेज है कि यह कैसे आतंक विरोधी में किया जाता है करने के लिए ढेर समान अनुरेखण संभालती के लिए खोज रहे:Node.js में स्टैक ट्रेस लॉग इन कैसे करें

Rails: Logging the entire stack trace of an exception

+0

रेल में क्या "स्टैक ट्रेस पैकेज" आप बात कर रहे हैं? –

+0

मैंने एक लिंक जोड़ने के लिए प्रश्न अपडेट किया। –

+0

संभावित डुप्लिकेट [कैसे नोड.जेएस में एक स्टैक ट्रेस मुद्रित करें?] (Http://stackoverflow.com/questions/2923858/how-to-print-a-stack-trace-in-node-js) –

उत्तर

31

आप .stack के बंद इस पाठ प्राप्त कर सकते हैं किसी भी त्रुटि से संपत्ति। उदाहरण के लिए:

try { 
    throw new Error(); 
} catch (e) { 
    console.log(e.stack); 
} 

या स्टैक ट्रेस हो रही के प्रयोजनों के लिए सिर्फ new ऊपर एक त्रुटि

console.log(new Error().stack) 
+0

ओह बहुत अच्छा :) –

+0

यह '(नई त्रुटि()) होना चाहिए। stack'। 'नई त्रुटि()। स्टैक' को 'त्रुटि()। स्टैक' मिलेगी और उसके बाद – Kayla

+4

संख्या में से कुछ बनाने का प्रयास करें, यह सही नहीं है कि 'नया' ऑपरेटर हमेशा प्राथमिकता लेता है। – Benja

7

वहाँ उस के लिए एक समारोह है: console.trace()

मामले आप नहीं करना चाहते हैं में कंसोल पर लॉग इन करें, आप new Error().stack

+0

मुझे नहीं पता था कि विधि मौजूद थी..मैं यह कोशिश करूँगा! –

+0

हां, लेकिन अगर आपको पसंद करने की ज़रूरत है .. iono .. इसे पास करें, या इसके साथ कुछ करें? कंसोल फ़ंक्शंस को एक कारण के लिए "सहायक" फ़ंक्शन कहा जाता है - वे बस हैं इसलिए आप विशिष्ट मामलों में वास्तव में आलसी हो सकते हैं;) –

+0

जो मूल प्रश्न के आधार पर एक बड़ा "क्या होगा" जैसा लगता है, लेकिन मुझे इसके लिए अपडेट करने दें। – Benja

0

का उपयोग करके स्टैक ट्रेस स्ट्रिंग मान प्राप्त कर सकते हैं callsite देखें, यह sta grabs सीके ऑब्जेक्ट ताकि आप इसे किसी भी तरह से इस्तेमाल कर सकें (और स्ट्रिंग के बजाए ऑब्जेक्ट के रूप में)। यह बहुत बढ़िया, और अच्छा और सरल है। स्टैक

के साथ खेलने के बारे में अधिक जानकारी के लिए this देखें, पहले से ही नोड.जेएस के लिए कुछ उत्कृष्ट लॉगर्स हैं, लेकिन मैंने एक लॉगर बनाया जो रंगीन, सरल आउटपुट और संक्षिप्त स्टैक ट्रेस आउटपुट करता है। यह console.log को ओवरराइड नहीं करता है, जो मुझे आसान लगता है। यदि आप रुचि रखते हैं, तो आप इसे here, node-logger ढूंढ सकते हैं।

+0

यह वास्तव में अच्छा है - मैं इसे जांचने जा रहा हूं। –

+0

कॉलसाइट का कार्यान्वयन @ बेन्जा से सुझाव के अनुरूप है। –

5

आप winston का उपयोग करते हैं, तो आप इस जोड़ सकते हैं:

winston = require('winston'); 

logger = expandErrors(new winston.Logger()); 

logger.info(new Error("my error")); 

// Extend a winston by making it expand errors when passed in as the 
// second argument (the first argument is the log level). 
function expandErrors(logger) { 
    var oldLogFunc = logger.log; 
    logger.log = function() { 
    var args = Array.prototype.slice.call(arguments, 0); 
    if (args.length >= 2 && args[1] instanceof Error) { 
     args[1] = args[1].stack; 
    } 
    return oldLogFunc.apply(this, args); 
    }; 
    return logger; 
} 

और फिर आप स्टैक ट्रेस साथ विंस्टन वालों को मिलता है। a gist में भी है।

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