blockchain-api
Version:
API utilities for interacting with the Exatechl2 blockchain
85 lines (74 loc) • 1.61 kB
text/typescript
const isBrowser = typeof window !== 'undefined';
let config = {
enabled: !isBrowser,
level: 'info',
logToConsole: true
};
const LOG_LEVELS = {
debug: 0,
info: 1,
warn: 2,
error: 3
};
/**
*
* @param options
*/
export function configureLogger(options: Partial<typeof config>) {
config = { ...config, ...options };
}
/**
*
* @param level
* @returns
*/
function isLevelEnabled(level: keyof typeof LOG_LEVELS): boolean {
if (!config.enabled) return false;
return LOG_LEVELS[level] >= LOG_LEVELS[config.level as keyof typeof LOG_LEVELS];
}
/**
*
* @param level
* @param args
*/
function log(level: keyof typeof LOG_LEVELS, ...args: any[]) {
if (!isLevelEnabled(level)) return;
if (config.logToConsole) {
switch (level) {
case 'debug':
console.debug(...args);
break;
case 'info':
console.info(...args);
break;
case 'warn':
console.warn(...args);
break;
case 'error':
console.error(...args);
break;
}
}
}
export const logger = {
debug: (...args: any[]) => log('debug', ...args),
info: (...args: any[]) => log('info', ...args),
warn: (...args: any[]) => log('warn', ...args),
error: (...args: any[]) => log('error', ...args),
/**
*
* @param enabled
*/
setEnabled: (enabled: boolean) => {
config.enabled = enabled;
},
/**
*
*/
disableBrowserLogs: () => {
if (isBrowser) {
config.enabled = false;
}
}
};
export default logger;