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 :...