@danielkalen/simplybind
Version:
Magically simple, framework-less one-way/two-way data binding for frontend/backend in ~5kb.
117 lines (86 loc) • 1.93 kB
JavaScript
export var logLevel = {
none: 0,
error: 1,
warn: 2,
info: 3,
debug: 4
};
var loggers = {};
var currentLevel = logLevel.none;
var appenders = [];
var slice = Array.prototype.slice;
var loggerConstructionKey = {};
function log(logger, level, args) {
var i = appenders.length;
var current = void 0;
args = slice.call(args);
args.unshift(logger);
while (i--) {
current = appenders[i];
current[level].apply(current, args);
}
}
function debug() {
if (currentLevel < 4) {
return;
}
log(this, 'debug', arguments);
}
function info() {
if (currentLevel < 3) {
return;
}
log(this, 'info', arguments);
}
function warn() {
if (currentLevel < 2) {
return;
}
log(this, 'warn', arguments);
}
function error() {
if (currentLevel < 1) {
return;
}
log(this, 'error', arguments);
}
function connectLogger(logger) {
logger.debug = debug;
logger.info = info;
logger.warn = warn;
logger.error = error;
}
function createLogger(id) {
var logger = new Logger(id, loggerConstructionKey);
if (appenders.length) {
connectLogger(logger);
}
return logger;
}
export function getLogger(id) {
return loggers[id] || (loggers[id] = createLogger(id));
}
export function addAppender(appender) {
appenders.push(appender);
if (appenders.length === 1) {
for (var key in loggers) {
connectLogger(loggers[key]);
}
}
}
export function setLevel(level) {
currentLevel = level;
}
export var Logger = function () {
function Logger(id, key) {
if (key !== loggerConstructionKey) {
throw new Error('Cannot instantiate "Logger". Use "getLogger" instead.');
}
this.id = id;
}
Logger.prototype.debug = function debug(message) {};
Logger.prototype.info = function info(message) {};
Logger.prototype.warn = function warn(message) {};
Logger.prototype.error = function error(message) {};
return Logger;
}();