reading the firebug console in javascript

后端 未结 5 579
春和景丽
春和景丽 2020-12-19 16:37

I\'m looking for a way to read the most recent command that was logged to the firebug console.

For example, I could have something that does

console.         


        
相关标签:
5条回答
  • 2020-12-19 17:17

    Don't try and override console.debug, implement a function that does console.debug plus what you need.

    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);
    }
    
    0 讨论(0)
  • 2020-12-19 17:23

    You could overwrite the console.log function to add whatever extra functionality you need.

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

    This won't be the most bulletproof solution, since console allows printf style syntax:

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

    ...but it's probably a start for you.

    0 讨论(0)
  • 2020-12-19 17:27

    Here's a more elaborate version I put together:

    /**
     * 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 讨论(0)
  • 2020-12-19 17:29

    Could you rewrite the console.log(), and append all logs to an array? Then fire up the original console.log() and repeat what it's doing to get your debug output on the console?

    0 讨论(0)
  • 2020-12-19 17:31

    You might wanna implement a queue. Expanding on Devin's answer: (something like this)

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

    See:
    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 讨论(0)
提交回复
热议问题