diff --git a/classes/rpc.php b/classes/rpc.php index 2a92eadbd..fd10a3a49 100755 --- a/classes/rpc.php +++ b/classes/rpc.php @@ -647,14 +647,19 @@ class RPC extends Handler_Protected { } function log() { - $logmsg = $this->dbh->escape_string($_REQUEST['logmsg']); + $msg = $this->dbh->escape_string($_REQUEST['msg']); + $file = $this->dbh->escape_string(basename($_REQUEST['file'])); + $line = (int) $_REQUEST['line']; + $context = $this->dbh->escape_string($_REQUEST['context']); - if ($logmsg) { + if ($msg) { Logger::get()->log_error(E_USER_WARNING, - $logmsg, '[client-js]', 0, false); - } + $msg, 'client-js:' . $file, $line, $context); - echo json_encode(array("message" => "HOST_ERROR_LOGGED")); + echo json_encode(array("message" => "HOST_ERROR_LOGGED")); + } else { + echo json_encode(array("error" => "MESSAGE_NOT_FOUND")); + } } } diff --git a/js/functions.js b/js/functions.js index ddb27cba1..b33c23dc1 100755 --- a/js/functions.js +++ b/js/functions.js @@ -32,31 +32,32 @@ Array.prototype.remove = function(s) { function report_error(message, filename, lineno, colno, error) { - exception_error(error); + exception_error(error, null, filename, lineno); } -function exception_error(e, e_compat) { +function exception_error(e, e_compat, filename, lineno, colno) { if (typeof e == "string") e = e_compat; if (!e) return; // no exception object, nothing to report. try { + console.error(e); + var msg = e.toString(); try { new Ajax.Request("backend.php", { - parameters: {op: "rpc", method: "log", logmsg: msg}, + parameters: {op: "rpc", method: "log", + file: e.fileName ? e.fileName : filename, + line: e.lineNumber ? e.lineNumber : lineno, + msg: msg, context: e.stack}, onComplete: function (transport) { - console.log(transport.responseText); + console.warn(transport.responseText); } }); } catch (e) { console.error("Exception while trying to log the error.", e); } - var msg = e.toString(); - - console.error(msg); - var content = "

" + msg + "

"; if (e.stack) {