Skip to content

Instantly share code, notes, and snippets.

@levelsio
Created December 15, 2019 15:56

Revisions

  1. levelsio created this gist Dec 15, 2019.
    60 changes: 60 additions & 0 deletions log_js_errors.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,60 @@

    // <log errors to server>
    window.onerror = function (messageOrEvent, source, lineno, colno, error) {
    try {
    console.log({
    //error message(string).Available as event (sic!) in HTML onerror = "" handler.
    messageOrEvent: messageOrEvent,
    //URL of the script where the error was raised(string)
    source: source,
    //Line number where error was raised(number)
    lineno: lineno,
    //Column number for the line where the error occurred(number)
    colno: colno,
    //Error Object(object)
    error: error
    });

    //placeholder array for request parameters
    var params = [],
    //saves a unique id to prevent creating a new script tags for each error
    ___guid = window.onerror___guid || (window.onerror___guid = (new Date().getTime() + '-' + new Date().getTime())), //a guidto for the error script element id
    //create a new function if none exists with the unique id
    ___logError = function (___url) {
    ___domScript = document.getElementById(___guid);
    if (!___domScript) {
    var ___head = document.head || document.getElementsByTagName('head')[0],
    ___domScript = document.createElement('script');

    ___domScript.id = ___guid;
    ___domScript.dataType = 'json';
    ___domScript.async = 'async';

    ___head.insertBefore(___domScript, ___head.firstChild);
    }

    ___domScript.src = ___url;
    };

    params.push('browser=' + encodeURIComponent(((navigator.userAgent + '|' + navigator.vendor + '|' + navigator.platform + '|' + navigator.platform) || '').toString()));
    params.push('lineNumber=' + encodeURIComponent((lineno || '').toString()));
    params.push('colNumber=' + encodeURIComponent((colno || '').toString()));
    params.push('source=' + encodeURIComponent((source || '').toString()));
    params.push('error=' + encodeURIComponent((error || '').toString()));
    params.push('messageOrEvent=' + encodeURIComponent((messageOrEvent || '').toString()));
    params.push('url=' + encodeURIComponent((window.location.href || '').toString()));


    // `/JavascriptError` is your servers endpoint
    ___logError('/url_on_your_server.php?action=report_js_error&' + params.join('&'));
    }
    catch (e) {
    // squelch, because we don’t want to prevent method from returning true
    console.log(e);
    }

    //When the function returns true, this prevents the firing of the default event handler.
    return false;
    };
    // </log errors to server>