Improve error handling
parent
e5172612e9
commit
717072a415
45
src/index.js
45
src/index.js
|
@ -17,16 +17,45 @@ try {
|
|||
}
|
||||
|
||||
// Error handling
|
||||
// Force crash on unhandled rejections and uncaught exceptions.
|
||||
// Use something like forever/pm2 to restart.
|
||||
const MAX_STACK_TRACE_LINES = 8;
|
||||
|
||||
function errorHandler(err) {
|
||||
// Unknown message types (nitro boosting messages at the time) should be safe to ignore
|
||||
if (err && err.message && err.message.startsWith("Unhandled MESSAGE_CREATE type")) {
|
||||
return;
|
||||
}
|
||||
|
||||
// For everything else, crash with the error
|
||||
console.error(err);
|
||||
if (err) {
|
||||
if (typeof err === "string") {
|
||||
console.error(`Error: ${err}`);
|
||||
} else if (err instanceof utils.BotError) {
|
||||
// Leave out stack traces for BotErrors (the message has enough info)
|
||||
console.error(`Error: ${err.message}`);
|
||||
} else {
|
||||
// Truncate long stack traces for other errors
|
||||
const stack = err.stack || "";
|
||||
let stackLines = stack.split("\n");
|
||||
if (stackLines.length > (MAX_STACK_TRACE_LINES + 2)) {
|
||||
stackLines = stackLines.slice(0, MAX_STACK_TRACE_LINES);
|
||||
stackLines.push(` ...stack trace truncated to ${MAX_STACK_TRACE_LINES} lines`);
|
||||
}
|
||||
const finalStack = stackLines.join("\n");
|
||||
|
||||
if (err.code) {
|
||||
console.error(`Error ${err.code}: ${finalStack}`);
|
||||
} else {
|
||||
console.error(`Error: ${finalStack}`);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
console.error("Unknown error occurred");
|
||||
}
|
||||
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
process.on("uncaughtException", errorHandler);
|
||||
process.on("unhandledRejection", errorHandler);
|
||||
|
||||
|
@ -48,18 +77,6 @@ const utils = require("./utils");
|
|||
const main = require("./main");
|
||||
const knex = require("./knex");
|
||||
|
||||
// Force crash on unhandled rejections (use something like forever/pm2 to restart)
|
||||
process.on("unhandledRejection", err => {
|
||||
if (err instanceof utils.BotError || (err && err.code)) {
|
||||
// We ignore stack traces for BotErrors (the message has enough info) and network errors from Eris (their stack traces are unreadably long)
|
||||
console.error(`Error: ${err.message}`);
|
||||
} else {
|
||||
console.error(err);
|
||||
}
|
||||
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
(async function() {
|
||||
// Make sure the database is up to date
|
||||
const [completed, newMigrations] = await knex.migrate.list();
|
||||
|
|
Loading…
Reference in New Issue