fetch-xl
Version:
Fluent, interceptable (using es6 generators), configurable and loggable fetch wrapper
79 lines (65 loc) • 1.69 kB
JavaScript
import {LOG_LEVEL} from './logLevels';
import verify from '../verify';
import is from '../is';
let LOGGER = console;
export const setUnderlyingLogger = (logger) => {
verify(logger, is.logger, 'Input should at least have a log function.');
LOGGER = logger;
};
const initLogger = (context, logLevel = LOG_LEVEL.LOG) => {
return {
log,
logGroupStart,
logGroupMsg,
logGroupEnd,
isEnabled
};
function log(...toBeLogged) {
if (!isEnabled()) {
return;
}
try {
LOGGER[logLevel](context, ...toBeLogged);
} catch (e) {
LOGGER.log(context, ...toBeLogged);
}
}
function logGroupMsg(...toBeLogged) {
if (!isEnabled()) {
return;
}
try {
LOGGER[logLevel](...toBeLogged);
} catch (e) {
LOGGER.log(...toBeLogged);
}
}
function logGroupStart(title, isCollapsed = true) {
if (!isEnabled()) {
return;
}
try {
if (isCollapsed) {
LOGGER.groupCollapsed(`${context} ${title}`);
} else {
LOGGER.group(`${context} ${title}`);
}
} catch (e) {
log(logLevel, `-- group ${context} ${title} --`);
}
}
function logGroupEnd() {
if (!isEnabled()) {
return;
}
try {
LOGGER.groupEnd();
} catch (e) {
log(logLevel, `-- group ${context} end --`);
}
}
function isEnabled() {
return logLevel !== LOG_LEVEL.NO_LOGGING;
}
};
export default initLogger;