import DefaultLoggerAPI from './DefaultLoggerAPI';
import {LoggerAPI} from './LoggerAPI';
import {LoggerRegistry} from './LoggerRegistry';
class LoggerController {
debugEnabled = false;
infoEnabled = true;
isDebugEnabled() {
return this.debugEnabled;
}
isInfoEnabled() {
return this.infoEnabled;
}
/**
* In the browser console, enable debug by entering window._loggerController.enableDebug().
*/
enableDebug(): string {
console.info('Enabling debug...');
this.debugEnabled = true;
return 'Debug level logging is now enabled. ۜ\(סּںסּَ` )/ۜ';
}
/**
* In the browser console, disable debug by entering window._loggerController.disableDebug().
*/
disableDebug() {
console.info('Disabling debug...');
this.debugEnabled = false;
return 'Debug level logging is now disabled. ε(´סּ︵סּ`)з';
}
/**
* In the browser console, enable info by entering window._loggerController.enableInfo().
*/
enableInfo(): string {
console.info('Enabling info...');
this.infoEnabled = true;
return 'Info level logging is now enabled. 【ツ】';
}
/**
* In the browser console, disable info by entering window._loggerController.disableInfo().
*
* Note: disabling info will also disable debug.
*/
disableInfo() {
console.info('Disabling info...');
this.debugEnabled = false;
this.infoEnabled = false;
return 'Info level logging is now disabled. (-.-)Zzz...';
}
}
/**
* This class serves two purposes:
* - It provides the ability for products to register their implementations
* of LoggerAPI for use by the connect front end code.
* - It provides the LoggerAPI implementation that connect front end code
* should use. This implementation delegates to the registered LoggerAPI
* implementation. This class should be used within the connect front end
* code as follows:
*
* import logger from '../adaptors/logger/LoggerAdaptor';
*
* logger.info('My message', extraStuffOfInterest, etc, ...);
*/
class LoggerAdaptor implements LoggerRegistry {
loggerController: LoggerController;
loggerAPI = DefaultLoggerAPI;
constructor() {
this.loggerController = new LoggerController();
( window)._loggerController = this.loggerController;
}
/**
* Implementation of AnalyticsRegistry#registerAnalyticsAPI().
*/
registerLoggerAPI(loggerAPI: LoggerAPI): void {
this.loggerAPI = loggerAPI;
}
/**
* Implementation of LoggerAPI#debug() for use by connect-module-core code.
*/
debug(message?: string, ...optionalParams: any[]): void {
try {
if (this.loggerController.isDebugEnabled()) {
this.loggerAPI.debug.apply(this.loggerAPI, arguments);
}
} catch (exception) {
// Ignore
}
}
/**
* Implementation of LoggerAPI#info() for use by connect-module-core code.
*/
info(message?: string, ...optionalParams: any[]): void {
try {
if (this.loggerController.isInfoEnabled()) {
this.loggerAPI.info.apply(this.loggerAPI, arguments);
}
} catch (exception) {
// Ignore
}
}
/**
* Implementation of LoggerAPI#warn() for use by connect-module-core code.
*/
warn(message?: string, ...optionalParams: any[]): void {
try {
this.loggerAPI.warn.apply(this.loggerAPI, arguments);
} catch (exception) {
const logger = console.warn || console.log;
if (logger) {
logger.apply(logger, arguments);
}
}
}
/**
* Implementation of LoggerAPI#error() for use by connect-module-core code.
*/
error(message?: string, ...optionalParams: any[]): void {
try {
this.loggerAPI.error.apply(this.loggerAPI, arguments);
} catch (exception) {
const logger = console.error || console.log;
if (logger) {
logger.apply(logger, arguments);
}
}
}
}
export const logger = new LoggerAdaptor() as LoggerRegistry;