如何在node.js中记录堆栈跟踪

如何在node.js中记录堆栈跟踪,node.js,logging,stack-trace,Node.js,Logging,Stack Trace,正在寻找一个node.js包,该包处理堆栈跟踪,类似于在RoR中的处理方式: 您可以从.stack属性的任何错误中获取此文本。例如: try { throw new Error(); } catch (e) { console.log(e.stack); } 或者只是new为获取堆栈跟踪而设置一个错误 console.log(new Error().stack) 这有一个函数:console.trace() 如果您不想登录控制台,您可以使用new Error()获取堆栈跟踪字

正在寻找一个node.js包,该包处理堆栈跟踪,类似于在RoR中的处理方式:


您可以从
.stack
属性的任何错误中获取此文本。例如:

try {
    throw new Error();
} catch (e) {
    console.log(e.stack);
}
或者只是
new
为获取堆栈跟踪而设置一个错误

console.log(new Error().stack)

这有一个函数:
console.trace()

如果您不想登录控制台,您可以使用
new Error()获取堆栈跟踪字符串值。stack

签出,这将捕获堆栈对象,以便您可以以任何方式使用它(并且作为对象,而不是字符串)。它非常棒,又好又简单。查看有关使用堆栈的更多信息

现在已经有一些优秀的Node.js记录器,但是我构建了一个记录器,它输出彩色的、简单的输出和简短的堆栈跟踪。它不会覆盖console.log,我觉得它很方便。如果您感兴趣,可以找到它。

如果您使用,可以添加以下内容:

winston=require('winston');
logger=expandErrors(新的winston.logger());
logger.info(新错误(“我的错误”);
//通过使winston在作为
//第二个参数(第一个参数是日志级别)。
函数错误(记录器){
var oldLogFunc=logger.log;
logger.log=函数(){
var args=Array.prototype.slice.call(参数,0);
如果(args.length>=2&&args[1]instanceof Error){
args[1]=args[1]。堆栈;
}
返回oldLogFunc.apply(此参数为args);
};
返回记录器;
}

然后你会得到winston Logger的堆栈跟踪。也在中。

你在谈论Rails中的“堆栈跟踪包”是什么?我更新了问题以添加链接。可能是重复的,我不知道该方法存在。我将尝试一下!是的,但是如果你需要喜欢。。伊奥诺。。传来传去,还是用它做点什么?控制台函数被称为“helper”函数是有原因的——它们只是为了让您在特定情况下真正懒惰;)这听起来像是一个基于原始问题的大“假设”,但让我更新一下。根本不是一个大假设。我向一个集中的日志存储报告我的错误消息。非常感谢您的更新!它需要是
(新错误())。堆栈
new Error()。stack
会得到
Error()。stack
然后尝试从中构造一些东西不,这在js中是不正确的
new
操作符始终优先。您应该实际使用
console.Error
而不是
console.log
。它们可能看起来做了同样的事情,但实际上是将前面的输出用于
stderr
而不是
stdout
。特别适用于
electron
应用程序,其中
console.trace()
并不总是有效。callsite的实现与@Benja的建议一致。