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

时间:2012-03-04 01:55:11

标签: node.js logging stack-trace

寻找一个处理堆栈跟踪的node.js包,类似于在RoR中完成此操作的方式:

Rails: Logging the entire stack trace of an exception

4 个答案:

答案 0 :(得分:32)

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

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

或仅new出现错误以获取堆栈跟踪

console.log(new Error().stack)

答案 1 :(得分:7)

有一个功能:console.trace()

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

答案 2 :(得分:7)

如果您使用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

答案 3 :(得分:0)

查看callsite,这会抓取堆栈对象,以便您可以以任何方式使用它(以及作为对象,而不是字符串)。它非常棒,漂亮而简单。查看this了解有关使用堆栈的更多信息

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

相关问题