add logger

This commit is contained in:
rubikscraft 2022-03-28 16:47:12 +02:00
parent f5a0e6f251
commit 060247c0db
No known key found for this signature in database
GPG key ID: 1463EBE9200A5CD4
2 changed files with 103 additions and 0 deletions

View file

@ -0,0 +1,73 @@
export enum LoggerLevel {
error = 'error',
warn = 'warn',
log = 'log',
verbose = 'verbose',
debug = 'debug',
}
export interface LoggerContext {
source: string;
}
export const DEFAULT_LOGGER_LEVELS: string[] = Object.values(LoggerLevel);
const LoggerStyles: {
[key in LoggerLevel]: string;
} = {
[LoggerLevel.error]: 'color: red; font-weight: bold',
[LoggerLevel.warn]: 'color: orange; font-weight: bold',
[LoggerLevel.log]: 'color: cyan; font-weight: bold',
[LoggerLevel.verbose]: 'font-weight: bold',
[LoggerLevel.debug]: 'color: gray; font-weight: bold',
};
const LoggerFunctions: {
[key in LoggerLevel]: 'error' | 'warn' | 'log' | 'debug';
} = {
[LoggerLevel.error]: 'error',
[LoggerLevel.warn]: 'warn',
[LoggerLevel.log]: 'log',
[LoggerLevel.verbose]: 'log',
[LoggerLevel.debug]: 'debug',
};
export class GlobalLogger {
private enabledLevels: string[] = [];
constructor() {
this.enabledLevels = DEFAULT_LOGGER_LEVELS;
}
verbose(args: any[], context: LoggerContext) {
this.sendLog(args, LoggerLevel.verbose, context);
}
debug(args: any[], context: LoggerContext) {
this.sendLog(args, LoggerLevel.debug, context);
}
log(args: any[], context: LoggerContext) {
this.sendLog(args, LoggerLevel.log, context);
}
warn(args: any[], context: LoggerContext) {
this.sendLog(args, LoggerLevel.warn, context);
}
error(args: any[], context: LoggerContext) {
this.sendLog(args, LoggerLevel.error, context);
}
setLogLevels(levels: string[]) {
this.enabledLevels = levels;
}
private sendLog(args: any[], level: LoggerLevel, context: LoggerContext) {
if (!this.enabledLevels.includes(level)) {
return;
}
const styles = LoggerStyles[level];
const message = ['%c' + context.source, styles, ...args];
console[LoggerFunctions[level]](...message);
}
}

View file

@ -0,0 +1,30 @@
import { GlobalLogger, LoggerContext } from './global-logger.service';
export class Logger {
private static globalLogger = new GlobalLogger();
private context: LoggerContext;
constructor(source: string) {
this.context = { source };
}
verbose(...args: any[]) {
Logger.globalLogger.verbose(args, this.context);
}
debug(...args: any[]) {
Logger.globalLogger.debug(args, this.context);
}
log(...args: any[]) {
Logger.globalLogger.log(args, this.context);
}
warn(...args: any[]) {
Logger.globalLogger.warn(args, this.context);
}
error(...args: any[]) {
Logger.globalLogger.error(args, this.context);
}
}