UNPKG

consolereplacer

Version:

Replacer of original console methods.

103 lines (87 loc) 2.53 kB
/** * 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 };