container.ts
Version:
Modular application framework
109 lines • 4.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const assert = require("assert");
const container_1 = require("../../container");
const Process_1 = require("../process/Process");
const Log_1 = require("./Log");
// Rollbar does not have defined types.
const ROLLBAR = require("rollbar");
// TODO: Validation library.
exports.ENV_ROLLBAR_ACCESS_TOKEN = "ROLLBAR_ACCESS_TOKEN";
exports.ENV_ROLLBAR_REPORT_LEVEL = "ROLLBAR_REPORT_LEVEL";
class RollbarLog extends Log_1.Log {
constructor(name, opts) {
super(name, opts, { _process: Process_1.Process.name });
// Get Node environment value.
const environment = this._process.nodeEnvironment;
this.debug(`environment '${environment}'`);
// Get access token from environment.
const accessToken = this.environment.get(exports.ENV_ROLLBAR_ACCESS_TOKEN);
assert(accessToken != null, "Rollbar access token is undefined");
// Get report level from environment or fall back on log level.
const rawReportLevel = this.environment.get(exports.ENV_ROLLBAR_REPORT_LEVEL);
const reportLevel = this.reportLevel(rawReportLevel);
this.debug(`reportLevel '${reportLevel}'`);
// Create Rollbar instance.
// Report level determined by module log level.
// Handle uncaught exceptions and unhandled rejections by default.
// Uncaught errors have 'critical' level by default.
this._rollbar = new ROLLBAR({
environment,
accessToken,
reportLevel,
handleUncaughtExceptions: true,
handleUnhandledRejections: true,
uncaughtErrorLevel: "critical",
});
}
/** Rollbar handler for incoming log messages. */
handleLog(log) {
const callback = this.handlerError.bind(this);
// Map log level to rollbar log methods.
switch (log.level) {
case container_1.ELogLevel.Emergency:
case container_1.ELogLevel.Alert:
case container_1.ELogLevel.Critical: {
this._rollbar.critical(log.message, log.metadata, ...log.args, callback);
break;
}
case container_1.ELogLevel.Error: {
this._rollbar.error(log.message, log.metadata, ...log.args, callback);
break;
}
case container_1.ELogLevel.Warning: {
this._rollbar.warning(log.message, log.metadata, ...log.args, callback);
break;
}
case container_1.ELogLevel.Notice:
case container_1.ELogLevel.Informational: {
this._rollbar.info(log.message, log.metadata, ...log.args, callback);
break;
}
case container_1.ELogLevel.Debug: {
this._rollbar.debug(log.message, log.metadata, ...log.args, callback);
break;
}
}
}
/** Rollbar error handler callback. */
handlerError(error) {
if (error != null) {
process.stderr.write(String(error));
}
}
/** Return rollbar report level. */
reportLevel(value) {
let level;
if (value != null) {
level = this.parseLevel(value);
}
else {
level = this.level;
}
switch (level) {
case container_1.ELogLevel.Emergency:
case container_1.ELogLevel.Alert:
case container_1.ELogLevel.Critical: {
return "critical";
}
case container_1.ELogLevel.Error: {
return "error";
}
case container_1.ELogLevel.Warning: {
return "warning";
}
case container_1.ELogLevel.Notice:
case container_1.ELogLevel.Informational: {
return "info";
}
case container_1.ELogLevel.Debug: {
return "debug";
}
default: {
return "error";
}
}
}
}
exports.RollbarLog = RollbarLog;
//# sourceMappingURL=RollbarLog.js.map