web-dev-qa-db-ja.com

node.jsにスタックトレースを記録する方法

RoRでこれが行われるのと同様のスタックトレースを処理するnode.jsパッケージを探しています。

Rails:例外のスタックトレース全体をログに記録する

21
Chris Abrams

このテキストは、任意のエラーから.stackプロパティから取得できます。例えば:

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

または、スタックトレースを取得するためにエラーをnewだけ上げます

console.log(new Error().stack)
37
kelloti

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;
}

次に、スタックトレース付きのウィンストンロガーを取得します。 要点 にもあります。

9
jdg

そのための関数があります:console.trace()

コンソールにログを記録したくない場合は、new Error().stackを使用してスタックトレース文字列値を取得できます。

8
Benja

チェックアウト callsite 、これはスタックオブジェクトを取得するので、好きなように(そして文字列ではなくオブジェクトとして)使用できます。そのかなり素晴らしい、そして素晴らしくてシンプルです。スタックで遊ぶことの詳細については this をチェックしてください

Node.js用の優れたロガーはすでにいくつかありますが、色付きのシンプルな出力と簡単なスタックトレースを出力するロガーを作成しました。これは、便利だと思うconsole.logをオーバーライドしません。興味があれば、それを見つけることができます ここでは、node-logger

0
Mike P