2012-03-04 152 views
17

尋找一個Node.js的包處理堆棧跟蹤相似,這是如何做到的回報率:如何登錄node.js的堆棧跟蹤

Rails: Logging the entire stack trace of an exception

+0

你在說什麼Rails中的「stack trace package」? – 2012-03-04 01:57:38

+0

我更新了問題以添加鏈接。 – 2012-03-04 02:03:06

+0

[如何在Node.js中打印堆棧跟蹤?](http://stackoverflow.com/questions/2923858/how-to-print-a-stack-trace-in-node-js) – 2016-04-29 13:15:05

回答

31

你可以得到這個文本關閉.stack的來自任何錯誤的屬性。例如:

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

或只是new了一個錯誤獲取堆棧跟蹤的目的

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

Ohh非常好:) – 2012-03-05 15:30:20

+0

這將需要'(新錯誤())。堆棧。 'new Error()。stack'會得到'Error()。stack',然後嘗試從中構造一些東西 – Kayla 2012-07-10 04:20:55

+4

否,在js中不是這樣,new''操作符總是優先。 – Benja 2013-04-11 03:07:54

7

對此有專門的函數:console.trace()

在你不想的情況下登錄到控制檯,您可以使用new Error().stack

+0

我不知道這種方法存在..我會試試這個! – 2012-03-17 16:08:53

+0

雅,但如果你需要喜歡.. iono ......會傳遞給它,或者做些什麼呢?控制檯功能被稱爲「助手」功能的原因 - 他們只是讓你可以在特定情況下非常懶惰; ) – 2013-04-11 02:43:06

+0

這聽起來像是一個很大的「假設」基於原來的問題,但讓我更新。 – Benja 2013-04-11 02:59:54

0

檢出callsite,這個抓取sta ck對象,所以你可以以任何你喜歡的方式使用它(和一個對象,而不是一個字符串)。它非常棒,而且很好很簡單。查看this以瞭解關於使用堆棧的更多信息

已經有一些優秀的logger用於Node.js,但是我構建了一個記錄器,用於輸出彩色的簡單輸出和簡短的堆棧跟蹤。它不會覆蓋console.log,我發現它很方便。如果你有興趣,你可以找到它here, node-logger

+0

這真的很酷 - 我要檢查一下。 – 2012-05-14 22:27:32

+0

callsite的實現與@Benja的建議是一致的。 – 2017-02-01 18:53:11

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