Как записать трассировки стека в node.js - PullRequest
20 голосов
/ 04 марта 2012

Поиск пакета node.js, который обрабатывает трассировку стека, аналогично тому, как это делается в RoR:

Rails: регистрация всей трассировки стека исключительной ситуации

Ответы [ 4 ]

33 голосов
/ 04 марта 2012

Вы можете получить этот текст из свойства .stack при любой ошибке.Например:

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

или просто new ошибка для получения трассировки стека

console.log(new Error().stack)
7 голосов
/ 26 мая 2014

Если вы используете 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 со следами стека. И есть в суть .

7 голосов
/ 16 марта 2012

для этого есть функция: console.trace()

Если вы не хотите входить в консоль, вы можете получить значение строки трассировки стека, используя new Error().stack

0 голосов
/ 10 мая 2012

Извлечение CallSite , это захватывает объект стека, так что вы можете использовать его любым удобным вам способом (и как объект, а не как строку).Это довольно круто, красиво и просто.Проверьте this для получения дополнительной информации об игре со стеком

Уже есть несколько отличных регистраторов для Node.js, но я создал регистратор, который выводит цветной, простой выводкраткая трассировка стека.Он не переопределяет console.log, что я считаю удобным.Если вам интересно, вы можете найти его здесь, node-logger .

...