Files
MQL4Data/Node/x-logger.tools.js
2024-01-25 04:05:58 +03:30

362 lines
6.5 KiB
JavaScript

/**
* XLogger Tools Module ...
* a module which used to handle all Loggings related actions in node js ...
*
* Maintainer
*
* Hadi Khazaee Asl <https://saherelm.ir> (hadi_khazaee_asl@yahoo.com)
*/
//
//#region Imports ...
const XColorTools = require("./x-color.tools");
const XValueTools = require("./x-value.tools");
//#endregion
//
//#region Variables/Constants ...
let baseLogTag = 'xFrameworkCLI';
let enableLogging = true;
/**
* Log Tags ...
*/
const XLogTag = {
Debug: 'debug',
Info: 'info',
Warn: 'warn',
Error: 'error'
};
//#endregion
//
//#region Actions ...
/**
* retrieve an instance of XLogMessage ...
*
* @param {string} tag tag of logging ...
* @param {string} message content of log message ...
* @param {array of any} args args of content which required to logging ...
* @param {number} timestamp logging time ...
*
* @returns an instance of log message object ...
*/
function XLogMessage(
tag,
message,
args,
timestamp
) {
//
if (!tag) {
throw 'Tag not provided ...';
}
//
if (!message) {
throw 'Message not provided ...';
}
//
if (!args) {
args = [];
}
//
if (!timestamp) {
timestamp = new Date().getTime();
}
//
return {
tag,
message,
args,
timestamp,
};
}
/**
* log data ...
*
* @param {XLogMessage} message
*/
function log(message) {
//
if (!message || !message.tag || !message.message || !enableLogging) {
return;
}
//
message.timestamp = new Date().getTime();
//
switch (message.tag) {
//
case XLogTag.Debug:
logDebug(message);
break;
//
case XLogTag.Info:
logInfo(message);
break;
//
case XLogTag.Warn:
logWarn(message);
break;
//
case XLogTag.Error:
logError(message);
break;
//
default:
break;
}
}
/**
* Log Debug ...
*
* @param {XLogMessage} message
*/
function logDebug(message) {
//
if (!message || !message.message || !enableLogging || message.tag !== XLogTag.Debug) {
return;
}
//
message.timestamp = new Date().getTime();
//
const cBaseLogTag = XColorTools.colorifyContent(
baseLogTag,
XColorTools.COLOR_NAMES.LightGray
);
//
const cTag = XColorTools.colorifyContent(
message.tag,
XColorTools.COLOR_NAMES.Default
);
//
const cMessage = XColorTools.colorifyContent(
message.message,
XColorTools.COLOR_NAMES.LightGray
);
//
console.debug(`${cBaseLogTag}:${cTag} => ${cMessage}`, ...message.args);
}
/**
* Log Info ...
*
* @param {XLogMessage} message
*/
function logInfo(message) {
//
if (!message || !message.message || !enableLogging || message.tag !== XLogTag.Info) {
return;
}
//
message.timestamp = new Date().getTime();
//
const cBaseLogTag = XColorTools.colorifyContent(
baseLogTag,
XColorTools.COLOR_NAMES.LightGray
);
//
const cTag = XColorTools.colorifyContent(
message.tag,
XColorTools.COLOR_NAMES.Default
);
//
const cMessage = XColorTools.colorifyContent(
message.message,
XColorTools.COLOR_NAMES.Blue
);
//
console.info(`${cBaseLogTag}:${cTag} => ${cMessage}`, ...message.args);
}
/**
* Log Warn ...
*
* @param {XLogMessage} message
*/
function logWarn(message) {
//
if (!message || !message.message || !enableLogging || message.tag !== XLogTag.Warn) {
return;
}
//
message.timestamp = new Date().getTime();
//
const cBaseLogTag = XColorTools.colorifyContent(
baseLogTag,
XColorTools.COLOR_NAMES.LightGray
);
//
const cTag = XColorTools.colorifyContent(
message.tag,
XColorTools.COLOR_NAMES.Default
);
//
const cMessage = XColorTools.colorifyContent(
message.message,
XColorTools.COLOR_NAMES.Yellow
);
//
console.warn(`${cBaseLogTag}:${cTag} => ${cMessage}`, ...message.args);
}
/**
* Log Error ...
*
* @param {XLogMessage} message
*/
function logError(message) {
//
if (!message || !message.message || !enableLogging || message.tag !== XLogTag.Error) {
return;
}
//
message.timestamp = new Date().getTime();
//
const cBaseLogTag = XColorTools.colorifyContent(
baseLogTag,
XColorTools.COLOR_NAMES.LightGray
);
//
const cTag = XColorTools.colorifyContent(
message.tag,
XColorTools.COLOR_NAMES.Default
);
//
const cMessage = XColorTools.colorifyContent(
message.message,
XColorTools.COLOR_NAMES.Red
);
//
console.error(`${cBaseLogTag}:${cTag} => ${cMessage}`, ...message.args);
}
/**
* issue simple debug log ...
*
* @param {string} message log message ...
*/
function simpleDebugLog(message = "") {
//
const msgObject = XLogMessage(
XLogTag.Debug,
message
);
//
logDebug(msgObject);
}
/**
* issue simple info log ...
*
* @param {string} message log message ...
*/
function simpleInfoLog(message = "") {
//
const msgObject = XLogMessage(
XLogTag.Info,
message
);
//
logInfo(msgObject);
}
/**
* issue simple warn log ...
*
* @param {string} message log message ...
*/
function simpleWarnLog(message = "") {
//
const msgObject = XLogMessage(
XLogTag.Warn,
message
);
//
logWarn(msgObject);
}
/**
* issue simple error log ...
*
* @param {string} message log message ...
*/
function simpleErrorLog(message = "") {
//
const msgObject = XLogMessage(
XLogTag.Error,
message
);
//
logError(msgObject);
}
//#endregion
//
//#region Module Eports ...
module.exports = {
//
enableLogging: () => {
enableLogging = true;
},
disableLogging: () => {
enableLogging = false;
},
isLoggingEnable: () => {
return enableLogging;
},
changeBaseLogTag: (value => {
//
if (XValueTools.isValidArg(value)) {
baseLogTag = value;
}
}),
//
XLogTag: XLogTag,
//
XLogMessage: XLogMessage,
log: log,
logDebug: logDebug,
logInfo: logInfo,
logWarn: logWarn,
logError: logError,
//
simpleDebugLog,
simpleInfoLog,
simpleWarnLog,
simpleErrorLog,
}
//#endregion