js-awe
Version:
Awesome js utils including - plan: An Asynchronous control flow with a functional taste - Chrono: record and visualize timelines in the console
48 lines (47 loc) • 1.97 kB
JavaScript
import loglevel from 'loglevel';
import { formatDate } from './jsUtils.js';
// log acts as a bridge with some ehancements to loglelvel
const log = logAsProxyOfLogLevel();
function logAsProxyOfLogLevel() {
const formattedDate = formatDate('$YYYY-$MM-$DD $hh:$mm:$ss', new Date());
const logBridge = {
get: function (target, prop, receiver) {
const addPrefix = {
apply: function (target, thisArg, listOfArg) {
return target(`${formattedDate} ${listOfArg.join(' ')} `);
}
};
if (typeof target[prop] === 'function' && ['trace', 'debug', 'info', 'warn', 'error', 'log'].includes(prop))
return new Proxy(target[prop], addPrefix);
else if (logBridge[prop] !== undefined)
return logBridge[prop];
else
return target[prop];
},
set: function (obj, prop, value) {
if (logBridge[prop] !== undefined)
logBridge[prop] = value;
else
obj[prop] = value;
return true;
}
};
return new Proxy(loglevel, logBridge);
}
//log.LEVEL_NUMBER_TO_NAME = ['TRACE', 'DEBUG','INFO','WARN','ERROR', 'SILENT']
log.LEVEL_NUMBER_TO_NAME = Object.entries(loglevel.levels).map(elem => elem[0]);
//log.NAME_TO_LEVEL_NUMBER={ 'TRACE': 0, 'DEBUG': 1, 'INFO': 2, 'WARN': 3, 'ERROR': 4, 'SILENT': 5}
log.NAME_TO_LEVEL_NUMBER = { ...loglevel.levels };
function levelName(levelNameOrLevelNumber) {
if (typeof levelNameOrLevelNumber === 'number')
return log.LEVEL_NUMBER_TO_NAME[levelNameOrLevelNumber];
return levelNameOrLevelNumber;
}
function levelNumber(levelNameOrLevelNumber) {
if (typeof levelNameOrLevelNumber === 'string')
return log.NAME_TO_LEVEL_NUMBER[levelNameOrLevelNumber.toUpperCase()];
return levelNameOrLevelNumber;
}
log.levelName = levelName;
log.levelNumber = levelNumber;
export { log };