1

スタックの深さに基づいてすべてのメッセージをインデントするJavaScriptロガーを探しています。たとえば、関数Aが関数Bを呼び出す場合、次のようになります。

hi from A
    hi from B

また、異なるスタックの関数から発信された場合は、メッセージに色を付けることができるようにしたいと思います。そうすれば、非同期イベントを追跡できます。

インターフェイスは次のようにする必要があります。

function B(){ log('hi from B'); }
function A(){ log('hi from A'); B(); }

任意の提案をいただければ幸いです:)

4

1 に答える 1

2

この機能が役立つと思います:

var log = function(msg) {
  var $level = 0, parent = arguments.callee.caller;
  while(parent
        && parent.arguments
        && parent.arguments.callee 
        && parent.arguments.callee.caller) {
    parent = parent.arguments.callee.caller;
    $level = $level + 1;
  }
  console.info(Array($level).join("  "), msg);
}

次のコードの出力は次のとおりです。

function B(){ log('hi from B'); }
function A(){ log('hi from A'); B(); }

B();
A();

出力

logページを親呼び出し先として受け取る場合があるため、次のような出力を変更する必要がある場合があります

console.info(Array($level - 1).join("  "), msg);

join(" ")のスペース文字の数によって、インデントの大きさが指定されることに注意してください。

それが役立つことを願っています。

于 2013-01-10T21:00:20.963 に答える