Has anyone setup rollbar with Sailsjs?

529 views Asked by At

I'm trying to set up the Rollbar.com exception monitoring with Sails.js.

I've reviewed their "Rollbar notifier for Node.js" section. So far I haven't been able to get it running.

I'm assuming I need to update the app.js file somehow, but have not seen any errors in startup or logging on Rollbar.

Any tips would be great!

Here is a copy of my app.js:

/**
 * app.js
 *
 * Use `app.js` to run your app without `sails lift`.
 * To start the server, run: `node app.js`.
 *
 * This is handy in situations where the sails CLI is not relevant or useful.
 *
 * For example:
 *   => `node app.js`
 *   => `forever start app.js`
 *   => `node debug app.js`
 *   => `modulus deploy`
 *   => `heroku scale`
 *
 *
 * The same command-line arguments are supported, e.g.:
 * `node app.js --silent --port=80 --prod`
 */

// Ensure we're in the project directory, so relative paths work as expected
// no matter where we actually lift from.
process.chdir(__dirname);

// Ensure a "sails" can be located:
(function() {
  var sails;
  try {
    sails = require('sails');
  } catch (e) {
    console.error('To run an app using `node app.js`, you usually need to have a version of `sails` installed in the same directory as your app.');
    console.error('To do that, run `npm install sails`');
    console.error('');
    console.error('Alternatively, if you have sails installed globally (i.e. you did `npm install -g sails`), you can use `sails lift`.');
    console.error('When you run `sails lift`, your app will still use a local `./node_modules/sails` dependency if it exists,');
    console.error('but if it doesn\'t, the app will run with the global sails instead!');
    return;
  }

  // Try to get `rc` dependency
  var rc;
  try {
    rc = require('rc');
  } catch (e0) {
    try {
      rc = require('sails/node_modules/rc');
    } catch (e1) {
      console.error('Could not find dependency: `rc`.');
      console.error('Your `.sailsrc` file(s) will be ignored.');
      console.error('To resolve this, run:');
      console.error('npm install rc --save');
      rc = function () { return {}; };
    }
  }

  // Initialize Rollbar
  var rollbar = require("rollbar");
  rollbar.init("MY-ROLLBAR-TOKEN");


  // Start server
  sails.lift(rc('sails'));

})();
2

There are 2 answers

1
Meeker On BEST ANSWER

You need to tell rollbar what to catch. If you read just past the quick start on

// more is required to automatically detect and report errors. // keep reading for details

To report any uncaught exception you need to:

var options = {
  exitOnUncaughtException: true
};
rollbar.handleUncaughtExceptions("POST_SERVER_ITEM_ACCESS_TOKEN", options);
0
emj365 On
/**
 * Built-in Log Configuration
 * (sails.config.log)
 *
 * Configure the log level for your app, as well as the transport
 * (Underneath the covers, Sails uses Winston for logging, which
 * allows for some pretty neat custom transports/adapters for log messages)
 *
 * For more information on the Sails logger, check out:
 * http://sailsjs.org/#!/documentation/concepts/Logging
 */

var winston = require('winston')
var rollbar = require('rollbar')

var customLogger = new (winston.Logger)({
  exitOnError: false, // don't crash on exception
  transports: [
    new (winston.transports.Console)({
      level: 'debug',
      handleExceptions: true,
      prettyPrint: true,
      silent: false,
      timestamp: true,
      colorize: true,
      json: false
    }),
    new (winston.transports.File)({
      filename: 'logs/common.log',
      name: 'file.all',
      level: 'debug',
      maxsize: 1024000,
      maxFiles: 10,
      handleExceptions: true,
      json: false
    }),
    new (winston.transports.File)({
      filename: 'logs/error.log',
      name: 'file.error',
      level: 'error',
      maxsize: 1024000,
      maxFiles: 10,
      handleExceptions: true,
      json: false
    })
  ]
})

if (process.env['ROLLBAR_TOKEN']) {
  rollbar.init(process.env['ROLLBAR_TOKEN'], {
    environment: process.env['NODE_ENV']
  })

  customLogger.on('logging', function (transport, level, msg, meta) {
    if (transport.name === 'file.error') {
      rollbar.reportMessage(msg + meta)
    }
  })
}

module.exports.log = {
  custom: customLogger,
  level: 'silly',

  inspect: false
}