UNPKG

inmo-logger

Version:

This is a custom logging library based on winston.

84 lines (83 loc) 4.45 kB
"use strict"; 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;