@arcana/ca-sdk
Version:
Arcana Network's chain abstraction SDK for unified balance in Web3 apps
77 lines (76 loc) • 2.2 kB
JavaScript
export const LOG_LEVEL = {
DEBUG: 1,
ERROR: 4,
INFO: 2,
NOLOGS: 5,
WARNING: 3,
};
export const setExceptionReporter = (reporter) => {
state.exceptionReporter = reporter;
};
const sendException = (msg) => {
if (state.exceptionReporter) {
state.exceptionReporter(msg);
}
};
export const setLogLevel = (level) => {
state.logLevel = level;
};
export const getLogger = () => {
return state.logger;
};
class Logger {
constructor() {
this.prefix = "XAR_CA_SDK";
}
consoleLog(level, message, params) {
if (level < state.logLevel) {
return;
}
switch (level) {
case LOG_LEVEL.DEBUG:
console.debug(`[DEBUG]`, message, params);
break;
case LOG_LEVEL.ERROR:
console.error(`[ERROR]`, message, params);
break;
case LOG_LEVEL.INFO:
console.info(`[INFO]`, message, params);
break;
case LOG_LEVEL.WARNING:
console.warn(`[WARN]`, message, params);
break;
default:
console.log(`[LOG]`, message, params);
}
}
debug(message, params = {}) {
this.internalLog(LOG_LEVEL.DEBUG, message, params);
}
error(message, err) {
if (err instanceof Error) {
this.internalLog(LOG_LEVEL.ERROR, message, err.message);
sendException(JSON.stringify({ error: err.message, message }));
return;
}
if (typeof err == "string") {
this.internalLog(LOG_LEVEL.ERROR, message, err);
sendException(JSON.stringify({ error: err, message }));
}
}
info(message, params = {}) {
this.internalLog(LOG_LEVEL.INFO, message, params);
}
internalLog(level, message, params) {
const logMessage = `[${this.prefix}] Msg: ${message}\n`;
this.consoleLog(level, logMessage, params);
}
warn(message, params = {}) {
this.internalLog(LOG_LEVEL.WARNING, message, params);
}
}
const state = {
exceptionReporter: null,
logger: new Logger(),
logLevel: LOG_LEVEL.NOLOGS,
};