Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | 4x 4x 4x 12x 1x 1x 1x 1x 9x 9x 1x 1x 4x 30x 30x 1x 153x 25x 128x 6x 14x 5x 4x 30x 30x 30x | 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 });
}
|