1/** 2 * Object for logging to sentry 3 */ 4var SentryPlugin = (function () { 5 6 /** 7 * Log a javascript error to the server 8 * 9 * @see https://docs.sentry.io/clientdev/attributes/ for for supported attributes in data 10 * @param {Error} e The error to log 11 * @param {object} [data] Any additional data to pass in the sentry event 12 */ 13 var logSentryException = function (e, data) { 14 data = data || {}; 15 16 data.request = { 17 url: window.location.href, 18 headers: { 19 referer: document.referrer 20 }, 21 cookies: document.cookie, 22 }; 23 24 jQuery.post(DOKU_BASE + 'lib/exe/ajax.php', { 25 'call': 'plugin_sentry', 26 'name': e.name, 27 'message': e.message, 28 'stack': e.stack, 29 'id': JSINFO.id, 30 'additionalData': data 31 }); 32 }; 33 34 // register as global error handler 35 var originalErrorHandler = window.onerror; 36 window.onerror = function (msg, url, lineNo, columnNo, error) { 37 logSentryException(error, {}); 38 originalErrorHandler(error); 39 }; 40 41 // wrap around DokuWiki's plugin error handling 42 var originalLogError = window.logError; 43 window.logError = function (e, file) { 44 logSentryException(e, {culprit: file}); 45 originalLogError(e, file); 46 }; 47 48 // exports 49 return { 50 logSentryException: logSentryException 51 } 52})(); 53