UNPKG

@featurevisor/sdk

Version:

Featurevisor SDK for Node.js and the browser

91 lines (72 loc) 2.12 kB
export type LogLevel = "debug" | "info" | "warn" | "error"; export type LogMessage = string; export interface LogDetails { [key: string]: any; } export type LogHandler = (level: LogLevel, message: LogMessage, details?: LogDetails) => void; export interface CreateLoggerOptions { levels?: LogLevel[]; handler?: LogHandler; } export const loggerPrefix = "[Featurevisor]"; export const defaultLogLevels: LogLevel[] = [ // supported, but not enabled by default // "debug", // "info", // enabled by default "warn", "error", ]; export const defaultLogHandler: LogHandler = function defaultLogHandler( level, message, details = {}, ) { switch (level) { case "debug": console.log(loggerPrefix, message, details); break; case "info": console.info(loggerPrefix, message, details); break; case "warn": console.warn(loggerPrefix, message, details); break; case "error": console.error(loggerPrefix, message, details); break; } }; export class Logger { private levels: LogLevel[]; private handle: LogHandler; constructor(options: CreateLoggerOptions) { this.levels = options.levels as LogLevel[]; this.handle = options.handler as LogHandler; } setLevels(levels: LogLevel[]) { this.levels = levels; } log(level: LogLevel, message: LogMessage, details?: LogDetails) { if (this.levels.indexOf(level) !== -1) { this.handle(level, message, details); } } debug(message: LogMessage, details?: LogDetails) { this.log("debug", message, details); } info(message: LogMessage, details?: LogDetails) { this.log("info", message, details); } warn(message: LogMessage, details?: LogDetails) { this.log("warn", message, details); } error(message: LogMessage, details?: LogDetails) { this.log("error", message, details); } } export function createLogger(options: CreateLoggerOptions = {}): Logger { const levels = options.levels || defaultLogLevels; const logHandler = options.handler || defaultLogHandler; return new Logger({ levels, handler: logHandler }); }