4

我正在寻找一种方法来读取记录到 firebug 控制台的最新命令。

例如,我可以做一些事情

console.debug('The most current request URI is /sweatsocks');

然后另一段(伪)代码可以

if (mostRecentConsoleEntry().endsWith('/sweatsocks')) {
  // do some stuff
}

调试语句的上下文将在被测代码中,控制台检查将在 selenium 脚本中完成。这将让我观察深埋在 js 函数中的信息以及在运行时构建的东西。

4

5 回答 5

5

您可以覆盖该console.log功能以添加您需要的任何额外功能。

var oldLog = console.log;
var lastLog;
console.log = function () {
    // do whatever you need to do here: store the logs into a different variable, etc
    // eg:
    lastLog = arguments;

    // then call the regular log command
    oldLog.apply(console, arguments);
};

这不会是最防弹的解决方案,因为console允许 printf 样式语法:

console.log("%d + %d = %s", 1, 3, "four");

...但这对你来说可能是一个开始。

于 2009-03-02T06:11:25.057 回答
2

不要尝试覆盖console.debug,实现console.debug 加上你需要的功能。

var debugCalls = [ ];
function myDebug(errorMessage){
  console.debug(errorMessage); //maintain original functionality
  debugCalls[debugCalls.length]  = errorMessage;
  //the previous argument to myDebug is debugCalls[debugCalls.length]

  //you may also want to call an ajax function to report this error
  mailError(errorMessage);
}
于 2011-08-07T05:47:25.233 回答
1

您可以重写console.log(), 并将所有日志附加到数组吗?然后启动原始console.log()文件并重复它正在执行的操作以在控制台上获取调试输出?

于 2009-03-02T05:46:11.420 回答
0

这是我整理的更详细的版本:

/**
 * Console log with memory
 *
 * Example:
 *
 *     console.log(1);
 *     console.history[0]; // [1]
 *
 *     console.log(123, 456);
 *     console.history.slice(-1)[0]; // [123, 456]
 *
 *     console.log('third');
 *     // Setting the limit immediately trims the array,
 *     // just like .length (but removes from start instead of end).
 *     console.history.limit = 2;
 *     console.history[0]; // [123, 456], the [1] has been removed
 *
 * @author Timo Tijhof, 2012
 */
console.log = (function () {
    var log  = console.log,
        limit = 10,
        history = [],
        slice = history.slice;

    function update() {
        if (history.length > limit) {
            // Trim the array leaving only the last N entries
            console.history.splice(0, console.history.length - limit);
        }
    }

    if (console.history !== undefined) {
        return log;
    }

    Object.defineProperty(history, 'limit', {
        get: function () { return limit; },
        set: function (val) {
            limit = val;
            update();
        }
    });

    console.history = history;

    return function () {
        history.push(slice.call(arguments));
        update();
        return log.apply(console, arguments);
    };

}());
于 2012-10-30T18:29:56.257 回答
-1

你可能想实现一个队列。扩展德文的答案:(类似这样)

var window.log = [];

logger function(msg) {
  var log_length = 10;
  console.log(msg);
  window.log.push(msg);
  if(window.log.length > log_length) {
    window.log.shift()
  }
}

请参阅:
如何在 JavaScript 中实现堆栈和队列?
http://aymanh.com/9-javascript-tips-you-may-not-know#string-concatenation-vs-arrayjoin

于 2012-05-22T10:25:37.070 回答