Showing console errors and alerts in a div inside the page

后端 未结 7 709
梦毁少年i
梦毁少年i 2020-12-02 09:10

I\'m building a debugging tool for my web app and I need to show console errors in a div. I know I can use my own made console like object and use it, but for future use I n

相关标签:
7条回答
  • 2020-12-02 09:34

    How about something as simple as:

    console.log = function(message) {$('#debugDiv').append('<p>' + message + '</p>');};
    console.error = console.debug = console.info =  console.log
    
    0 讨论(0)
  • 2020-12-02 09:39

    Else, if you were concerned at keeping log, warn and error separate from one another, you could do something like this (adapted from MST's answer):

    var log = document.querySelector('#log');
    
    ['log','warn','error'].forEach(function (verb) {
        console[verb] = (function (method, verb, log) {
            return function (text) {
                method(text);
                // handle distinguishing between methods any way you'd like
                var msg = document.createElement('code');
                msg.classList.add(verb);
                msg.textContent = verb + ': ' + text;
                log.appendChild(msg);
            };
        })(console[verb].bind(console), verb, log);
    });
    

    where #log is your HTML element. The variable verb is one of 'log', 'warn', or 'error'. You can then use CSS to style the text in a distinguishable way. Note that a lot of this code isn't compatible with old versions of IE.

    0 讨论(0)
  • 2020-12-02 09:40

    Here's a way using closure, containing the old console log function in the scope of the new one.

    console.log = (function (old_function, div_log) { 
        return function (text) {
            old_function(text);
            div_log.value += text;
        };
    } (console.log.bind(console), document.getElementById("error-log")));
    
    0 讨论(0)
  • 2020-12-02 09:40

    None of the answers here consider console messages that get passed multiple parameters. E.g. console.log("Error:", "error details")).

    The function that replaces the default log function better regards all function arguments (e.g. by using the arguments object). Here is an example:

    console.log = function() {
      log.textContent += Array.prototype.slice.call(arguments).join(' ');
    }
    

    (The Array.prototype.slice.call(...) simply converts the arguments object to an array, so it can be concatenated easily with join().)

    When the original log should be kept working as well:

    console.log = (function (old_log, log) { 
        return function () {
            log.textContent += Array.prototype.slice.call(arguments).join(' ');
            old_log.apply(console, arguments);
        };
    } (console.log.bind(console), document.querySelector('#log')));
    

    A complete solution:

    var log = document.querySelector('#log');
    ['log','debug','info','warn','error'].forEach(function (verb) {
        console[verb] = (function (method, verb, log) {
            return function () {
                method.apply(console, arguments);
                var msg = document.createElement('div');
                msg.classList.add(verb);
                msg.textContent = verb + ': ' + Array.prototype.slice.call(arguments).join(' ');
                log.appendChild(msg);
            };
        })(console[verb], verb, log);
    });
    

    (An example of a framework that emits messages with multiple parameters is Video.js. But there is certainly many others.)

    Edit: Another use of multiple parameters is the formatting capabilities of the console (e.g. console.log("Status code: %d", code).

    0 讨论(0)
  • 2020-12-02 09:41
    <!DOCTYPE html>
    <html>
    <head>
        <title>Page Title</title>
    </head>
    <body>
        <div id="logger" class="web_console"></div>
    
        <script type="text/javascript">
    
            // Overriding console object
            var console = {};
    
            // Getting div to insert logs
            var logger = document.getElementById("logger");
    
            // Adding log method from our console object
            console.log = function(text)
            {
                var element = document.createElement("div");
                var txt = document.createTextNode(text);
    
                element.appendChild(txt);
                logger.appendChild(element);
            }
    
            // testing
            console.log("Hello World...");
            console.log("WOW");
    
            /**
                console.log prints the message in the page instead browser console, useful to programming and debugging JS using a Android phone
    
            */
        </script>
    </body>
    </html>
    
    0 讨论(0)
  • 2020-12-02 09:48

    To keep the console working:

    if (typeof console  != "undefined") 
        if (typeof console.log != 'undefined')
            console.olog = console.log;
        else
            console.olog = function() {};
    
    console.log = function(message) {
        console.olog(message);
        $('#debugDiv').append('<p>' + message + '</p>');
    };
    console.error = console.debug = console.info =  console.log
    
    0 讨论(0)
提交回复
热议问题