inmo-logger
Version:
This is a custom logging library based on winston.
84 lines (83 loc) • 4.45 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const express_http_context_1 = __importDefault(require("express-http-context"));
const path_1 = __importDefault(require("path"));
const config_1 = __importDefault(require("config"));
const winston_1 = require("winston");
require("winston-syslog");
const file_utils_1 = __importDefault(require("./utils/file-utils"));
const logFolder = process.env.LOG_LOCAL_FOLDER || './logs/';
const exceptionsFileName = process.env.LOG_LOCAL_EXCEPTION_FILE_NAME || 'exceptions.log';
const logFileName = process.env.LOG_LOCAL_FILE_NAME || 'logs.log';
const logEnvironment = process.env.LOG_ENVIRONMENT || 'console';
const logLevel = process.env.LOG_LEVEL || 'info';
const applicationName = config_1.default.get('service_name') || '';
const exceptionsFilePath = path_1.default.join(logFolder, exceptionsFileName);
const regularLogFilePath = path_1.default.join(logFolder, logFileName);
class Logger {
constructor(globalFilename) {
const colorizer = winston_1.format.colorize();
const filenamePath = file_utils_1.default.getFolderAndFilename(globalFilename);
const defaultLoggingFormat = winston_1.format.combine(winston_1.format.simple(), winston_1.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), winston_1.format.printf((info) => colorizer.colorize(info.level, `[${info.timestamp}][${info.level}][${info.applicationName}][${info.filenamePath}] ${info.message}`)));
const transportsList = [
new winston_1.transports.Console({ format: defaultLoggingFormat, level: logLevel }),
];
if (logEnvironment.toLowerCase() === 'local') {
transportsList.push(new winston_1.transports.File({
filename: regularLogFilePath,
format: defaultLoggingFormat,
}), new winston_1.transports.File({
filename: exceptionsFilePath,
format: defaultLoggingFormat,
}));
}
this.logger = (0, winston_1.createLogger)({
level: logLevel,
format: defaultLoggingFormat,
defaultMeta: { applicationName, filenamePath },
transports: transportsList,
exceptionHandlers: transportsList,
});
const prepareMessage = (message, initTime, endTime, requestId) => {
const transactionId = express_http_context_1.default.get('Request-ID');
const separator = transactionId ? `[id:${transactionId}] >>> ` : ' >>> ';
let messageToLog = '';
if (initTime === undefined) {
messageToLog = buildMessage(requestId, separator, message);
}
else if (endTime === undefined) {
messageToLog = buildMessage(requestId, separator, message, initTime);
}
else {
messageToLog = buildMessage(requestId, separator, message, initTime, endTime);
}
return messageToLog;
};
this.info = (message, initTime, endTime, requestId) => this.logger.info(prepareMessage(message, initTime, endTime, requestId));
this.debug = (message, initTime, endTime, requestId) => this.logger.debug(prepareMessage(message, initTime, endTime, requestId));
this.warn = (message, initTime, endTime, requestId) => this.logger.warn(prepareMessage(message, initTime, endTime, requestId));
this.error = (message, initTime, endTime, requestId) => this.logger.error(prepareMessage(message, initTime, endTime, requestId));
this.crit = (message, initTime, endTime, requestId) => this.logger.crit(prepareMessage(message, initTime, endTime, requestId));
}
}
function buildMessage(requestId, separator, message, initTime, endTime) {
let messageToLog = '';
if (initTime !== undefined && endTime !== undefined) {
const difference = endTime - initTime;
messageToLog = `[${difference}ms]`;
}
else if (initTime !== undefined) {
const _endTime = new Date().getTime();
const difference = _endTime - initTime;
messageToLog = `[${difference}ms]`;
}
if (requestId !== undefined) {
messageToLog += `[id:${requestId}]`;
}
messageToLog += `${separator}${message}`;
return messageToLog;
}
exports.default = Logger;