Add an uncaughtException handler to request a ticket and details.

Looks like this:
    * * *
    * The Bunyan CLI crashed! Please report this issue:
    *
    *    https://github.com/trentm/node-bunyan/issues/new
    *
    * and include the following Bunyan details the log file
    * (or section of log file) on which the Bunyan CLI crashed.
    * * *
    * node version: v0.8.9
    * bunyan version: 0.14.2
    * argv: [ 'node', '/Users/trentm/tm/node-bunyan-0.x/bin/bunyan' ]
    * stack:
    *     TypeError: Object.keys called on non-object
    *         at Function.keys (native)
    *         at emitRecord (/Users/trentm/tm/node-bunyan-0.x/bin/bunyan:718:14)
    *         at handleLogLine (/Users/trentm/tm/node-bunyan-0.x/bin/bunyan:507:12)
    *         at Socket.<anonymous> (/Users/trentm/tm/node-bunyan-0.x/bin/bunyan:856:7)
    *         at Socket.EventEmitter.emit (events.js:88:17)
    *         at Pipe.onread (net.js:391:31)
    * * *
This commit is contained in:
Trent Mick 2012-10-10 11:28:03 -07:00
parent 46c63251a6
commit 337d7d977c

View file

@ -959,6 +959,32 @@ function asyncForEach(arr, iterator, callback) {
//---- mainline //---- mainline
process.on('uncaughtException', function (err) {
function indent(s) {
var lines = s.split(/\r?\n/);
for (var i = 0; i < lines.length; i++) {
lines[i] = '* ' + lines[i];
}
return lines.join('\n');
}
console.error('* * *');
console.error('* The Bunyan CLI crashed! Please report this issue:');
console.error('*');
console.error('* https://github.com/trentm/node-bunyan/issues/new');
console.error('*');
console.error('* and include the following Bunyan details the log file');
console.error('* (or section of log file) on which the Bunyan CLI crashed.');
console.error('* * *');
console.error('* node version:', process.version);
console.error('* bunyan version:', getVersion());
console.error('* argv:', process.argv);
console.error('* stack:');
console.error(indent(err.stack));
console.error('* * *');
process.exit(1);
});
function main(argv) { function main(argv) {
var opts; var opts;
try { try {