microservice-support-toolkit
Version:
A global module with commons utilities for microservice support
90 lines (74 loc) • 3.29 kB
JavaScript
const bunyan = require('bunyan');
const YAML = require('yaml');
const path = require('path');
const fs = require('fs');
let APPNAME = 'microservice';
const FILEPATH = path.join(__dirname, '../../../../log/app.log');
const init = () => {
try {
const filePath = path.join(__dirname, '../../../../resources/bootstrap.yml');
const file = fs.readFileSync(filePath, 'utf8');
const yamlFile = YAML.parse(file);
APPNAME = yamlFile.app.name;
} catch (err) {
console.error('/resources/bootstrap.yml NOT FOUND !!!!', err);
}
};
init();
// Override console
console.authorizedOutput = console.log;
console.log = (msg, params) => (params ? logger.trace(msg, params) : logger.trace(msg));
console.trace = (msg, params) => (params ? logger.trace(msg, params) : logger.trace(msg));
console.debug = (msg, params) => (params ? logger.trace(msg, params) : logger.trace(msg));
console.info = (msg, params) => (params ? logger.trace(msg, params) : logger.trace(msg));
console.warn = (msg, params) => (params ? logger.trace(msg, params) : logger.trace(msg));
console.error = (msg, params) => (params ? logger.trace(msg, params) : logger.trace(msg));
function RawStream() {}
RawStream.prototype.write = function (rec) {
console.authorizedOutput(`[${formatDateTime(new Date(rec.time.toISOString()))}] ${bunyan.nameFromLevel[rec.level].toUpperCase()} ${rec.msg}`);
};
const consoleStreamConfig = {
level: 'trace',
type: 'raw',
stream: new RawStream()
};
const fileStreamConfig = {
level: 'debug',
type: 'rotating-file',
path: FILEPATH,
period: '1d',
count: 3
};
const logger = bunyan.createLogger({
name: APPNAME,
streams: [
fileStreamConfig,
consoleStreamConfig
]
});
const formatDateTime = time => {
const year = time.getFullYear();
const month = pad(time.getMonth() + 1, 2);
const day = pad(time.getDate(), 2);
const hour = pad(time.getHours(), 2);
const minutes = pad(time.getMinutes(), 2);
const seconds = pad(time.getSeconds(), 2);
const milliseconds = pad(time.getMilliseconds(), 3);
return `${day}-${month}-${year} ${hour}:${minutes}:${seconds}.${milliseconds}`;
};
const pad = (number, size = 0) => {
let s = String(number);
while (s.length < size) {
s = `0${s}`;
}
return s;
};
const handleMessage = (actionName, msg) => `${actionName ? `${actionName} - ` : ''}${msg}`;
module.exports = {
trace: (msg, params, actionName) => (params ? logger.trace(handleMessage(actionName, msg), params) : logger.trace(handleMessage(actionName, msg))),
debug: (msg, params, actionName) => (params ? logger.debug(handleMessage(actionName, msg), params) : logger.debug(handleMessage(actionName, msg))),
info: (msg, params, actionName) => (params ? logger.info(handleMessage(actionName , msg), params) : logger.info(handleMessage(actionName , msg))),
warn: (msg, params, actionName) => (params ? logger.warn(handleMessage(actionName , msg), params) : logger.warn(handleMessage(actionName , msg))),
error: (msg, params, actionName) => (params ? logger.error(handleMessage(actionName, msg), params) : logger.error(handleMessage(actionName, msg))),
fatal: (msg, params, actionName) => (params ? logger.fatal(handleMessage(actionName, msg), params) : logger.fatal(handleMessage(actionName, msg)))
};