2009-03-02 3 views
4

Я ищу способ прочитать самую последнюю команду, которая была записана в консоль firebug.чтение консоли firebug в javascript

Например, я мог бы что-то, что делает

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

, а затем другой кусок (псевдо) кода мог тогда

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

Контекст является заявление отладки будет в коде под тест, а проверка консоли будет выполняться внутри сценария селена. Это позволило бы мне понаблюдать за информацией, глубоко погруженной в функции js, а также с материалом, который создается во время выполнения.

+0

«Самый текущий запрос URI is/sweatsocks "- это самый грубый URI, который я когда-либо слышал. – nickf

ответ

1

Не могли бы вы переписать console.log() и добавить все журналы в массив? Затем запустите оригинал console.log() и повторите то, что он делает, чтобы получить отладочный вывод на консоли?

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"); 

... но это, вероятно, начало для вас.

+0

Вот что я хотел знать :) +1 – alex

+0

Он не работает в FF3 и Firebug 1.3.3, поскольку console.log доступен только для чтения. Также вам не разрешено добавлять свойства к объекту консоли. – some

+1

Синтаксис для применения - .apply (thisobject, array), поэтому, если он работал для изменения объекта консоли, он должен был быть: console.oldLog.apply (console.oldLog, arguments); но я предлагаю использовать функцию selfexecuting, чтобы вместо этого сохранить приватную переменную. – some

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

См:
How do you implement a Stack and a Queue in JavaScript?
http://aymanh.com/9-javascript-tips-you-may-not-know#string-concatenation-vs-arrayjoin

+0

+1 hogy ne legyél mínuszba;) – 2014-07-11 18:41:23

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

}()); 
+0

Обновление: добавлена ​​логика Object.defineProperty, так что настройка console.history.limit сразу обрезает ее, а не после следующего вызова log() (как это делает внутренняя длина массива) – Krinkle

Смежные вопросы