【发布时间】:2012-03-22 00:55:41
【问题描述】:
寻找一个处理堆栈跟踪的 node.js 包,类似于在 RoR 中的处理方式:
【问题讨论】:
-
你在说什么 Rails 中的“堆栈跟踪包”?
-
我更新了问题以添加链接。
标签: node.js logging stack-trace
寻找一个处理堆栈跟踪的 node.js 包,类似于在 RoR 中的处理方式:
【问题讨论】:
标签: node.js logging stack-trace
您可以从任何错误的.stack 属性中获取此文本。例如:
try {
throw new Error();
} catch (e) {
console.log(e.stack);
}
或者只是 new 报错以获取堆栈跟踪
console.log(new Error().stack)
【讨论】:
(new Error()).stack。 new Error().stack 会得到 Error().stack,然后尝试从中构造一些东西
new 运算符始终优先。
console.error 而不是console.log。他们可能看起来做同样的事情,但实际上使用之前的输出到 stderr 而不是 stdout。
electron 应用程序中特别有用,而console.trace() 并不总是有效。
有一个函数:console.trace()
如果您不想登录到控制台,您可以使用new Error().stack 获取堆栈跟踪字符串值
【讨论】:
如果你使用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;
}
然后你会得到带有堆栈跟踪的 winston 记录器。也在a gist。
【讨论】:
查看callsite,它会抓取堆栈对象,因此您可以以任何您喜欢的方式使用它(并且作为对象,而不是字符串)。它非常棒,又好又简单。查看this 了解更多关于玩堆栈的信息
已经有一些优秀的 Node.js 记录器,但我构建了一个记录器,它可以输出彩色、简单的输出和简短的堆栈跟踪。它不会覆盖我觉得很方便的console.log。有兴趣可以找here, node-logger。
【讨论】: