diff --git a/imports/startup/server/catchExceptions.js b/imports/startup/server/catchExceptions.js new file mode 100644 index 0000000..af4d03b --- /dev/null +++ b/imports/startup/server/catchExceptions.js @@ -0,0 +1,21 @@ +/* eslint-disable import/no-absolute-path */ + +import { Meteor } from 'meteor/meteor'; +import ravenLogger from '/imports/startup/server/ravenLogger'; + +Meteor.startup(() => { + const bound = Meteor.bindEnvironment((callback) => { callback(); }); + process.on('uncaughtException', (err) => { + bound(() => { + // console.error('Server crashed!', err); + console.error(err); + // console.error(err.stack); + + // https://github.com/flowkey/meteor-raven + ravenLogger.log(err); + + // https://github.com/nodejs/node-v0.x-archive/blob/master/doc/api/process.markdown#exit-codes + process.exit(7); + }); + }); +}); diff --git a/imports/startup/server/index.js b/imports/startup/server/index.js index 018ccdd..736deff 100644 --- a/imports/startup/server/index.js +++ b/imports/startup/server/index.js @@ -1,4 +1,5 @@ import './ravenLogger'; +import './catchExceptions'; import './i18n'; import './accounts'; import './api'; diff --git a/imports/startup/server/ravenLogger.js b/imports/startup/server/ravenLogger.js index ac242f9..868132a 100644 --- a/imports/startup/server/ravenLogger.js +++ b/imports/startup/server/ravenLogger.js @@ -4,6 +4,7 @@ import { Meteor } from 'meteor/meteor'; const ravenOptions = {}; const ravenLogger = new RavenLogger({ + publicDSN: Meteor.settings.public.sentryPublicDSN, privateDSN: Meteor.settings.sentryPrivateDSN, shouldCatchConsoleError: true, // default true trackUser: true // default false diff --git a/imports/startup/server/segfaults.js b/imports/startup/server/segfaults.js index bb1b798..b976f0b 100644 --- a/imports/startup/server/segfaults.js +++ b/imports/startup/server/segfaults.js @@ -20,3 +20,6 @@ SegfaultHandler.registerHandler(`/var/tmp/tcef-stacktrace-${dateFileFormat}.log` // Only uncomment for segv tests // SegfaultHandler.causeSegfault(); + +// Or this for normal error (should go to raven in configured) +// throw new Error('This is just a test of error in server');