consolereplacer
Version:
Replacer of original console methods.
103 lines (87 loc) • 2.53 kB
JavaScript
/**
* Console Replacer
*
* @version 1.2.1
* @author Maplemx
* @email Maplemx@gmail.com
*/
import * as fs from 'fs';
class ConsoleReplacer {
constructor() {
let constructResult = {},
separator = '\t',
appName = 'unnamedApp',
subtitle = '',
enabled = true,
doLogFile = false;
function formatContent(inputArguments) {
let result =
new Date().toLocaleString() + separator + //Time
'[' + appName + ']' + separator + //AppName
(subtitle ? subtitle + separator : ''); //Subtitle
for (let contentItem of Array.from(inputArguments).values()) {
if (typeof(contentItem) === 'object') {
try {
result += JSON.stringify(contentItem) + separator;
} catch(e) {
result += contentItem.toString() + separator;
}
} else {
result += typeof(contentItem) !== 'undefined' ? contentItem.toString() : 'undefined';
result += separator;
}
}
return result;
}
function logContentToFile(contentString) {
let now = new Date();
fs.open(
'./' + appName + '_logs/' + appName + '_' + (1900 + now.getYear()) + '_' + (now.getMonth() + 1) + '_' + now.getDate() + '.log',
'a',
(e, fd) => {
fs.writeSync(fd, contentString + '\n');
fs.close(fd);
}
);
}
function outputLog(consoleMethod, inputArguments, isDebug) {
if (enabled){
let contentString = formatContent(inputArguments)
console[consoleMethod](contentString);
if (doLogFile && !isDebug) {
logContentToFile(contentString);
}
} else {
return false;
}
}
//Mass process of console methods
let methodsArray = ['log','trace','warn','error','info'];
for (let consoleMethod of methodsArray.values()) {
this[consoleMethod] = (...inputArguments) => {
outputLog(consoleMethod, inputArguments);
}
};
this.debug = (...inputArguments) => {
inputArguments.unshift('👉👉👉 ');
outputLog('trace', inputArguments, true);
};
this.setSeparator = (newSeparator) => separator = newSeparator;
this.setSubtitle = (newSubtitle) => subtitle = newSubtitle;
this.getSubtitle = () => subtitle;
this.setLogFile = (newDoLogFile) => {
doLogFile = newDoLogFile;
if (doLogFile) {
try {
fs.mkdirSync('./' + appName + '_logs');
} catch(e) {
if (e.code !== 'EEXIST') throw e;
}
}
}
this.setEnabled = (newEnabled) => enabled = newEnabled;
this.setAppName = (newAppName) => appName = newAppName;
}
}
let consoleReplacer = new ConsoleReplacer();
export { consoleReplacer };