Override Angular's built in exception handler
var app= angular.module("myApp", [] );
app.provider('$exceptionHandler', {
$get: function( errorLogService ){
return( errorLogService );
}});
Exception Logging Service, currently only used by the $exceptionHandler , posts the error server side after generating a stack-trace.
app.factory('errorLogService', ['$log', '$window', function($log, $window) {
function log(exception) {
$log.error.apply($log, arguments);
try {
var args = [];
if (typeof arguments === 'object') {
for (var i = 0; i < arguments.length; i++) {
arg = arguments[i];
var exceptionItem = {};
exceptionItem.message = arg.message;
exceptionItem.stack = arg.stack;
args.push(JSON.stringify(exception));
}
}
$.ajax({
type: "POST",
url: "./javascript-errors",
contentType: "application/json",
data: angular.toJson({
errorUrl: $window.location.href,
errorMessage: errorMessage,
stackTrace: stackTrace,
cause: (cause || "")
})
});
console.log('from inside the log method ' + args.join('\n') );
} catch ( loggingError ) {
$log.log(loggingError);
}
}
return (log);
}]);
Now in controller, use errorLogService.error() to log error. You can either throw error and call errorLogService in catch or directly.
errorLogService.error({
message: "error retrieving data",
data: response.body });