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 回答