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

Chr*_*ams 20 logging stack-trace node.js

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

Rails:记录异常的整个堆栈跟踪

kel*_*oti 34

您可以.stack从任何错误中获取该属性.例如:

try {
    throw new Error();
} catch (e) {
    console.log(e.stack);
}
Run Code Online (Sandbox Code Playgroud)

或者只是new为了获得堆栈跟踪而出错

console.log(new Error().stack)
Run Code Online (Sandbox Code Playgroud)

  • 不,这在js中是不正确的``new``运算符始终优先. (5认同)

Ben*_*nja 7

有一个功能: console.trace()

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


jdg*_*jdg 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;
}
Run Code Online (Sandbox Code Playgroud)

然后你得到带有堆栈跟踪的winston记录器.也是一个要点.