Because there are not enough other logger libraries out there ;D (and because I got a little distracted...)
// general example:
loggers = {
/// BLOCK BY NAME
rendering: true, // allow rendering token (can be omitted, is true by default)
routing: false, // false = blocked
/// ALLOW BY METHOD (overwrites token block)
// what can log even if it's name is blocked
// "error warn" by default
__allow: "error warn",
/// BLOCK BY METHOD (overwrites allow)
// supress all specified methods
__supress: "log error warn",
}
//// examples:
// block all logs
loggers = {
__supress: 'log'
}
// "rendering" is nothing allowed except 'error'
// no one is allowed to log
// everyone except "rendering" can warn
// log: no one
// warn: everyone except rendering
// error: everyone
loggers = {
rendering: false,
__allow: 'error',
__supress: 'log'
}
// or disable everything:
loggers = false;
((loggers = {}) => {
if (loggers && loggers.__allow === undefined) loggers.__allow = "warn error";
if (loggers && loggers.__supress === undefined) loggers.__supress = "";
let disabled = false,
log = (token, method, ...a) => {
if (!disabled && loggers !== false && (loggers.__supress.indexOf(method) == -1) && ((loggers.__allow.indexOf(method) > -1) || loggers[token] !== false)) console[method].apply(console, a)
};
function getLogger (token) {
let llog = log.bind({}, token);
let logger = (...a) => {
llog('log',...a);
}
logger.error = (...a) => {
llog('error', ...a)
}
logger.warn = (...a) => {
llog('warn', ...a)
}
return logger;
}
Logger = getLogger;
Logger.set = (token, val) => {
if (token === false) return disabled = true;
disabled = false;
loggers[token] = val === undefined ? false : val;
}
})(loggers)
// router.js (for example)
let log = Logger('router');
log("I'm just a standard", console, "log", ['a', 'b', 1, 2]);
log.warn("I'm a warning!");
log.error("I'm an error")
I don't know why, but why not?
Logger.set(false) // disable logging
Logger.set('someToken1', false) // enable logging again and set some token to false in the logger object
Logger.set('someToken2') // same thing... false is default
Logger.set('__allow','error') // change __warn
"use strict";(function(){var b=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};b&&b.__allow===void 0&&(b.__allow="warn error"),b&&b.__allow===void 0&&(b.__supress="");var c=!1,d=function d(e,f){for(var _len=arguments.length,g=Array(2<_len?_len-2:0),_key=2;_key<_len;_key++)g[_key-2]=arguments[_key];!c&&!1!==b&&-1==b.__supress.indexOf(f)&&(-1<b.__allow.indexOf(f)||!1!==b[e])&&console[f].apply(console,g)};Logger=function Logger(f){var g=function g(){for(var _len2=arguments.length,h=Array(_len2),_key2=0;_key2<_len2;_key2++)h[_key2]=arguments[_key2];d.apply(void 0,[f,"log"].concat(h))};return g.error=function(){for(var _len3=arguments.length,h=Array(_len3),_key3=0;_key3<_len3;_key3++)h[_key3]=arguments[_key3];d.apply(void 0,[f,"error"].concat(h))},g.warn=function(){for(var _len4=arguments.length,h=Array(_len4),_key4=0;_key4<_len4;_key4++)h[_key4]=arguments[_key4];d.apply(void 0,[f,"warn"].concat(h))},g},Logger.set=function(e){var f=1<arguments.length&&void 0!==arguments[1]&&arguments[1];return!1===e?c=!0:void(c=!1,b[e]=f)}})(loggers);
fun fact: babel had problems with function.prototype.bind but I am no expert on babel either^^ (simply worked around using bind())