container.ts
Version:
Modular application framework
76 lines • 2.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const winston = require("winston");
const container_1 = require("../../container");
const Log_1 = require("./Log");
class WinstonLog extends Log_1.Log {
constructor(name, opts) {
super(name, opts);
// Construct Winston logger with console transport.
// TODO: Optional file transport.
this._logger = new winston.Logger({
transports: [
new winston.transports.Console({
colorize: true,
}),
],
});
}
/** Winston handler for incoming log messages. */
handleLog(log) {
const callback = this.handleError.bind(this);
let message;
// If log message is an Error instance, use message string
// and prepend error object to arguments.
if (log.message instanceof Error) {
message = log.message.message || log.message.name;
log.args = [log.message].concat(log.args);
}
else {
message = log.message;
}
// Map log level to winston log methods.
switch (log.level) {
case container_1.ELogLevel.Emergency: {
this._logger.emerg(message, log.metadata, ...log.args, callback);
break;
}
case container_1.ELogLevel.Alert: {
this._logger.alert(message, log.metadata, ...log.args, callback);
break;
}
case container_1.ELogLevel.Critical: {
this._logger.crit(message, log.metadata, ...log.args, callback);
break;
}
case container_1.ELogLevel.Error: {
this._logger.error(message, log.metadata, ...log.args, callback);
break;
}
case container_1.ELogLevel.Warning: {
this._logger.warning(message, log.metadata, ...log.args, callback);
break;
}
case container_1.ELogLevel.Notice: {
this._logger.notice(message, log.metadata, ...log.args, callback);
break;
}
case container_1.ELogLevel.Informational: {
this._logger.info(message, log.metadata, ...log.args, callback);
break;
}
case container_1.ELogLevel.Debug: {
this._logger.debug(message, log.metadata, ...log.args, callback);
break;
}
}
}
/** Winston error handler callback. */
handleError(error) {
if (error != null) {
process.stderr.write(String(error));
}
}
}
exports.WinstonLog = WinstonLog;
//# sourceMappingURL=WinstonLog.js.map