尋找一個Node.js的包處理堆棧跟蹤相似,這是如何做到的回報率:如何登錄node.js的堆棧跟蹤
Rails: Logging the entire stack trace of an exception
尋找一個Node.js的包處理堆棧跟蹤相似,這是如何做到的回報率:如何登錄node.js的堆棧跟蹤
Rails: Logging the entire stack trace of an exception
你可以得到這個文本關閉.stack
的來自任何錯誤的屬性。例如:
try {
throw new Error();
} catch (e) {
console.log(e.stack);
}
或只是new
了一個錯誤獲取堆棧跟蹤的目的
console.log(new Error().stack)
對此有專門的函數:console.trace()
在你不想的情況下登錄到控制檯,您可以使用new Error().stack
我不知道這種方法存在..我會試試這個! – 2012-03-17 16:08:53
雅,但如果你需要喜歡.. iono ......會傳遞給它,或者做些什麼呢?控制檯功能被稱爲「助手」功能的原因 - 他們只是讓你可以在特定情況下非常懶惰; ) – 2013-04-11 02:43:06
這聽起來像是一個很大的「假設」基於原來的問題,但讓我更新。 – Benja 2013-04-11 02:59:54
檢出callsite,這個抓取sta ck對象,所以你可以以任何你喜歡的方式使用它(和一個對象,而不是一個字符串)。它非常棒,而且很好很簡單。查看this以瞭解關於使用堆棧的更多信息
已經有一些優秀的logger用於Node.js,但是我構建了一個記錄器,用於輸出彩色的簡單輸出和簡短的堆棧跟蹤。它不會覆蓋console.log,我發現它很方便。如果你有興趣,你可以找到它here, node-logger。
這真的很酷 - 我要檢查一下。 – 2012-05-14 22:27:32
callsite的實現與@Benja的建議是一致的。 – 2017-02-01 18:53:11
如果使用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。
你在說什麼Rails中的「stack trace package」? – 2012-03-04 01:57:38
我更新了問題以添加鏈接。 – 2012-03-04 02:03:06
[如何在Node.js中打印堆棧跟蹤?](http://stackoverflow.com/questions/2923858/how-to-print-a-stack-trace-in-node-js) – 2016-04-29 13:15:05