import { ConsoleAppender } from './appenders/ConsoleAppender'; import IAppender from './appenders/IAppender'; import {Logger} from './Logger'; import {LoggingLevel, LoggingLevelMapping, LoggingLevelType} from './LoggingLevel'; import {Threshold} from './Threshold'; export default class LoggerFactory { private static readonly _loggerForCategory: Map = new Map(); private static readonly _threshold: {level: LoggingLevel} = {level: LoggingLevel.Info}; private static readonly _appenders: IAppender[] = [new ConsoleAppender()]; public static getLogger(category: string): Logger { let logger = LoggerFactory._loggerForCategory.get(category); if (logger === undefined) { logger = new Logger({category, threshold: new Threshold(LoggerFactory._threshold), appenders: LoggerFactory._appenders}); LoggerFactory._loggerForCategory.set(category, logger); } return logger; } public static setLoggingLevel(level: LoggingLevelType): void { const loggingLevel = LoggingLevelMapping.convertLoggingLevelTypeToLoggingLevel(level); console.log(`${new Date().toISOString()} [LoggerFactory] Setting logging level to [${level}]`); LoggerFactory._threshold.level = loggingLevel; } private constructor() { throw new Error('[LoggerFactory] is a static class that may not be instantiated'); } }