@thoughtspot/visual-embed-sdk
Version:
ThoughtSpot Embed SDK
88 lines (71 loc) • 2.4 kB
text/typescript
import { isUndefined } from '../utils';
import { LogLevel } from '../types';
const logFunctions: {
[ ]: (...args: any[]) => void;
} = {
[ ]: () => undefined,
[ ]: console.error,
[ ]: console.warn,
[ ]: console.info,
[ ]: console.debug,
[ ]: console.trace,
};
let globalLogLevelOverride: LogLevel = LogLevel.TRACE;
const setGlobalLogLevelOverride = (logLevel: LogLevel): void => {
globalLogLevelOverride = logLevel;
};
const logLevelToNumber: { [key: string]: number } = {
[ ]: 0,
[ ]: 1,
[ ]: 2,
[ ]: 3,
[ ]: 4,
[ ]: 5,
};
const compareLogLevels = (logLevel1: LogLevel, logLevel2: LogLevel): number => {
const logLevel1Index = logLevelToNumber[logLevel1];
const logLevel2Index = logLevelToNumber[logLevel2];
return logLevel1Index - logLevel2Index;
};
class Logger {
private logLevel: LogLevel = LogLevel.ERROR;
public setLogLevel = (newLogLevel: LogLevel): void => {
this.logLevel = newLogLevel;
};
public getLogLevel = (): LogLevel => this.logLevel;
public canLog(logLevel: LogLevel): boolean {
if (logLevel === LogLevel.SILENT) return false;
if (!isUndefined(globalLogLevelOverride)) {
return compareLogLevels(globalLogLevelOverride, logLevel) >= 0;
}
return compareLogLevels(this.logLevel, logLevel) >= 0;
}
public logMessages(args: any[], logLevel: LogLevel): void {
if (this.canLog(logLevel)) {
const logFn = logFunctions[logLevel];
if (logFn) {
logFn(...args);
}
}
}
public log(...args: any[]): void {
this.info(args);
}
public info(...args: any[]): void {
this.logMessages(args, LogLevel.INFO);
}
public debug(...args: any[]): void {
this.logMessages(args, LogLevel.DEBUG);
}
public trace(...args: any[]): void {
this.logMessages(args, LogLevel.TRACE);
}
public error(...args: any[]): void {
this.logMessages(args, LogLevel.ERROR);
}
public warn(...args: any[]): void {
this.logMessages(args, LogLevel.WARN);
}
}
const logger = new Logger();
export { LogLevel, logger, setGlobalLogLevelOverride };