Logging experiment - ngrok
by jonahe
JavaScript
function logToApi(logMethod, ...args) {
/* test against a site such as https://webhook.site/ or a local web server + ngrok */
fetch("https://653cc0c0.ngrok.io", {
//credentials: "include",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({ logMethod, args, time: new Date().getTime() }),
method: "POST",
mode: "no-cors",
}
);
}
const remoteLogProvider = {
debug: logToApi.bind(null, "debug"),
log: logToApi.bind(null, "log"),
info: logToApi.bind(null, "info"),
warn: logToApi.bind(null, "warn"),
error: logToApi.bind(null, "error"),
};
window.remoteLogProvider = remoteLogProvider;
const defaultLogProvider = {
debug : console.debug,
log : console.log,
info : console.info,
warn : console.warn,
error : console.error
}
window.defaultLogProvider = defaultLogProvider;
var logProvider = defaultLogProvider;
function setLogProvider(newLogProvider) {
logProvider = newLogProvider;
}
window.setLogProvider = setLogProvider;
const LOG_LEVELS = {
"DEBUG" : 0,
"INFO" : 1,
"WARN" : 2,
"ERROR" : 3
}
var LOG_LEVEL = LOG_LEVELS.DEBUG;
function getCurrentLogLevel() {
return LOG_LEVEL;
}
function setLogLevel(newLogLevel) {
if(!Object.values(LOG_LEVELS).includes(newLogLevel)) throw new Error("Unknown log level of " + newLogLevel);
LOG_LEVEL = newLogLevel;
}
window.setLogLevel = setLogLevel;
const LEVELS_BY_METHOD_NAME = {
debug: LOG_LEVELS.DEBUG,
info: LOG_LEVELS.INFO,
log: LOG_LEVELS.INFO,
warn: LOG_LEVELS.WARN,
error: LOG_LEVELS.ERROR
}
function performLogging(method, ...args) {
const methodLevel = LEVELS_BY_METHOD_NAME[method];
if(methodLevel >= LOG_LEVEL) {
logProvider[method](...args);
}
}
// this would be a Singleton that you import where ever you want to log
const Logger = {
debug : function(...args) { performLogging("debug", ...args) },
log : function(...args) { performLogging("log", ...args) },
info :...