From 060247c0db649717ca08c695145d841b59a6cc52 Mon Sep 17 00:00:00 2001 From: rubikscraft Date: Mon, 28 Mar 2022 16:47:12 +0200 Subject: [PATCH] add logger --- .../services/logger/global-logger.service.ts | 73 +++++++++++++++++++ .../src/app/services/logger/logger.service.ts | 30 ++++++++ 2 files changed, 103 insertions(+) create mode 100644 frontend/src/app/services/logger/global-logger.service.ts create mode 100644 frontend/src/app/services/logger/logger.service.ts diff --git a/frontend/src/app/services/logger/global-logger.service.ts b/frontend/src/app/services/logger/global-logger.service.ts new file mode 100644 index 0000000..30de825 --- /dev/null +++ b/frontend/src/app/services/logger/global-logger.service.ts @@ -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); + } +} diff --git a/frontend/src/app/services/logger/logger.service.ts b/frontend/src/app/services/logger/logger.service.ts new file mode 100644 index 0000000..a20ca61 --- /dev/null +++ b/frontend/src/app/services/logger/logger.service.ts @@ -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); + } +}