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 | 1x 1x 1x 1x 1x 1x 1x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 1x 11x 7x 7x 7x 8x 2x 8x 2x 17x 5x 8x 2x 1x 6x 6x 6x 1x | export enum Level {
ERROR = 1,
WARN = 2,
INFO = 3,
DEBUG = 4,
}
export const levelMapper = {
[`${Level.ERROR}`]: 'error',
[`${Level.WARN}`]: 'warn',
[`${Level.INFO}`]: 'info',
[`${Level.DEBUG}`]: 'debug',
};
export class Logger {
public level: Level = Level.INFO;
private prefix: string | undefined;
onLog: ((level: Level, args: Array<any>) => any) | undefined;
constructor({
prefix,
level,
titleTemplate,
onLog,
}: {
prefix?: typeof Logger.prototype.prefix;
level?: typeof Logger.prototype.level;
titleTemplate?: typeof Logger.prototype.titleTemplate;
onLog?: typeof Logger.prototype.onLog;
} = {}) {
if (prefix) this.prefix = prefix;
if (level) this.level = level;
if (titleTemplate) this.titleTemplate = titleTemplate;
if (onLog) this.onLog = onLog;
}
log(runtimeLevel: Level, args) {
if (runtimeLevel <= this.level) {
const title = this.titleTemplate({
prefix: this.prefix,
level: runtimeLevel,
});
if (this.onLog) this.onLog(runtimeLevel, args);
console[levelMapper[runtimeLevel]](title, ...args);
}
}
error(...args) {
this.log(Level.ERROR, args);
}
warn(...args) {
this.log(Level.WARN, args);
}
info(...args) {
this.log(Level.INFO, args);
}
debug(...args) {
this.log(Level.DEBUG, args);
}
titleTemplate({
prefix,
level,
}: {
prefix: typeof Logger.prototype.prefix;
level: typeof Logger.prototype.level;
}) {
return prefix
? `[${prefix}:${levelMapper[level]}]`
: `[${levelMapper[level]}]`;
}
}
|