我正在寻找一个类似RoR中处理堆栈跟踪的node.js软件包:
我正在寻找一个类似RoR中处理堆栈跟踪的node.js软件包:
您可以从任何错误(Error)的.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
,然后尝试从中构建一些东西。 - McKaylaconsole.error
而不是 console.log
。它们看起来可能做同样的事情,但实际上前者输出到 stderr
而不是 stdout
。 - 0x8890electron
应用程序,其中 console.trace()
并不总是有效。 - x-yuri如果你使用 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;
}
针对此问题有一个函数可供使用:console.trace()
如果您不想要在控制台中打印日志,您可以使用 new Error().stack
获取堆栈跟踪字符串值。
看看callsite,它可以获取堆栈对象,以便您可以按任何方式使用它(而不是作为字符串)。它非常棒,而且简单易用。查看this以获取有关堆栈操作的更多信息。
Node.js已经有一些出色的记录器了,但我构建了一个记录器,它输出彩色、简单的输出和简短的堆栈跟踪。它不会覆盖console.log,这对我来说很方便。如果您感兴趣,可以在这里,node-logger找到它。