change: use regular getters and setters in LazyLoggerFactory

This commit is contained in:
Ruben Taelman
2020-09-23 09:43:48 +02:00
committed by Ruben Taelman
parent b62f4eb016
commit f186bece9f
6 changed files with 40 additions and 28 deletions

View File

@@ -22,8 +22,7 @@ export class LazyLogger extends Logger {
public log(level: LogLevel, message: string, meta: any): Logger {
if (!this.logger) {
this.logger = this.lazyLoggerFactory.getLoggerFactoryOrThrow()
.createLogger(this.label);
this.logger = this.lazyLoggerFactory.loggerFactory.createLogger(this.label);
}
return this.logger.log(level, message, meta);
}

View File

@@ -14,7 +14,7 @@ import type { LoggerFactory } from './LoggerFactory';
export class LazyLoggerFactory implements LoggerFactory {
private static readonly instance = new LazyLoggerFactory();
private loggerFactory: LoggerFactory | undefined;
private ploggerFactory: LoggerFactory | undefined;
private constructor() {
// Singleton instance
@@ -28,14 +28,18 @@ export class LazyLoggerFactory implements LoggerFactory {
return new LazyLogger(this, label);
}
public setLoggerFactory(loggerFactory: LoggerFactory | undefined): void {
this.loggerFactory = loggerFactory;
public resetLoggerFactory(): void {
this.ploggerFactory = undefined;
}
public getLoggerFactoryOrThrow(): LoggerFactory {
if (!this.loggerFactory) {
public get loggerFactory(): LoggerFactory {
if (!this.ploggerFactory) {
throw new Error('No logger factory has been set yet. Can be caused logger invocation during initialization.');
}
return this.loggerFactory;
return this.ploggerFactory;
}
public set loggerFactory(loggerFactory: LoggerFactory) {
this.ploggerFactory = loggerFactory;
}
}

View File

@@ -20,16 +20,25 @@ import type { LoggerFactory } from './LoggerFactory';
*
* @param loggable - A class instance or a class string name.
*/
export const getLoggerFor = (loggable: string | Instance): Logger => LazyLoggerFactory
.getInstance().createLogger(typeof loggable === 'string' ? loggable : loggable.constructor.name);
export const getLoggerFor = (loggable: string | Instance): Logger => LazyLoggerFactory.getInstance()
.createLogger(typeof loggable === 'string' ? loggable : loggable.constructor.name);
/**
* Sets the global logger factory.
* This will cause all loggers created by {@link getLoggerFor} to be delegated to a logger from the given factory.
* @param loggerFactory - A logger factory, of undefined for unsetting it.
* @param loggerFactory - A logger factory.
*/
export const setGlobalLoggerFactory = (loggerFactory: LoggerFactory | undefined): void => LazyLoggerFactory
.getInstance().setLoggerFactory(loggerFactory);
export const setGlobalLoggerFactory = (loggerFactory: LoggerFactory): void => {
LazyLoggerFactory.getInstance().loggerFactory = loggerFactory;
};
/**
* Resets the global logger factory to undefined.
*
* This typically only needs to be called during testing.
* Call this at your own risk.
*/
export const resetGlobalLoggerFactory = (): void => LazyLoggerFactory.getInstance().resetLoggerFactory();
/**
* Helper interface to identify class instances.