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 | 7x 7x 54x 54x 27x 27x 14x 13x 8x 54x 7x 7x 7x 46x 46x 1x 247x 247x 194x 53x 196x 28x 14x 7x 7x 26x | export type LogLevel = "fatal" | "error" | "warn" | "info" | "debug";
export type LogMessage = string;
export interface LogDetails {
[key: string]: any;
}
export type LogHandler = (level: LogLevel, message: LogMessage, details?: LogDetails) => void;
export interface CreateLoggerOptions {
level?: LogLevel;
handler?: LogHandler;
}
export const loggerPrefix = "[Featurevisor]";
export const defaultLogHandler: LogHandler = function defaultLogHandler(
level,
message,
details = {},
) {
let method = "log";
if (level === "info") {
method = "info";
} else if (level === "warn") {
method = "warn";
} else if (level === "error") {
method = "error";
}
console[method](loggerPrefix, message, details);
};
export class Logger {
static allLevels: LogLevel[] = [
"fatal",
"error",
"warn",
"info",
// not enabled by default
"debug",
];
static defaultLevel: LogLevel = "info";
private level: LogLevel;
private handle: LogHandler;
constructor(options: CreateLoggerOptions) {
this.level = options.level || Logger.defaultLevel;
this.handle = options.handler || defaultLogHandler;
}
setLevel(level: LogLevel) {
this.level = level;
}
log(level: LogLevel, message: LogMessage, details?: LogDetails) {
const shouldHandle = Logger.allLevels.indexOf(this.level) >= Logger.allLevels.indexOf(level);
if (!shouldHandle) {
return;
}
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 {
return new Logger(options);
}
|