nodejs-event-manager
Version:
A nodeJS Event Manager to emit, and listen event through nodeJS
103 lines • 3.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const logform = require("logform");
const stream_1 = require("stream");
const tripleBeam = require("triple-beam");
const winston = require("winston");
const EventManagerError_1 = require("./EventManagerError");
const { format } = winston;
const { combine, printf, metadata, timestamp, label, colorize, prettyPrint } = format;
/**
* Add error to info regarding the parameters
*/
const errorHunter = logform.format(info => {
if (info.error) {
return info;
}
const splat = info[tripleBeam.SPLAT] || [];
info.error = splat.find((obj) => obj instanceof Error);
if (!info.error && splat.length === 1) {
const obj = splat[0];
const keyIsError = Object.keys(obj).find(k => {
return obj[k] instanceof Error;
});
if (keyIsError) {
info.error = obj[keyIsError];
}
}
return info;
});
const errorPrinter = logform.format(info => {
if (!info.error) {
return info;
}
// Handle case where Error has no stack.
const errorMsg = info.error.stack || info.error.toString();
info.message += `\n${errorMsg.padStart()}`;
return info;
});
const myFormat = printf(info => {
let meta = "";
if (info.metadata && Object.keys(info.metadata).length > 0) {
// remove error instances
const filtered = Object.entries(info.metadata).filter(([k, m]) => !(m instanceof Error));
if (filtered.length > 0) {
meta = filtered.reduce((str, [k, v], index) => {
if (!(info.error && k === "stack")) {
str += `${k}:${JSON.stringify(v)}, `;
}
return str;
}, "\n");
}
}
const out = `${info.timestamp} [${info.label}] ${info.level}: ${info.message}`;
return `${out}${meta}`;
});
function createFormat(prefix) {
return combine(errorHunter(), timestamp(), label({ label: prefix }), colorize(), metadata({
fillExcept: ["message", "label", "timestamp", "level", "error"]
}), errorPrinter(), myFormat);
}
let currentLogger = null;
function createLogger({ prefix = "[RABBITMQ]", level = "error", transportMode = "console" }) {
if (currentLogger === null) {
const transports = []; // winston interface are not that useful
if (transportMode === "mute") {
transports.push(new winston.transports.Stream({
stream: new stream_1.Writable({
write: () => {
/* do nothing */
}
})
}));
}
else {
// transports === 'console'
transports.push(new winston.transports.Console({
level,
format: createFormat(prefix)
}));
}
currentLogger = winston.createLogger({
level,
format: winston.format.json(),
transports
});
}
}
exports.createLogger = createLogger;
exports.LOGGER = new Proxy({}, {
get: (_, prop) => {
if (currentLogger === null) {
throw new EventManagerError_1.EventManagerError("Logger has not been inititialized");
}
else {
return currentLogger[prop.toString()];
}
}
});
function setLogger(logger) {
currentLogger = logger;
}
exports.setLogger = setLogger;
//# sourceMappingURL=logger.js.map