43 lines
1.1 KiB
TypeScript
43 lines
1.1 KiB
TypeScript
import { LogLevel } from './log-message';
|
|
import Logger from './logger';
|
|
|
|
const ROOT_LOGGER_NAME = 'ROOT';
|
|
|
|
/* tslint:disable:max-classes-per-file*/
|
|
export class LogService {
|
|
|
|
private loggers: { [key: string]: Logger };
|
|
|
|
public get ROOT_LOGGER() {
|
|
return this.loggers[ROOT_LOGGER_NAME];
|
|
}
|
|
|
|
public constructor() {
|
|
this.loggers = {};
|
|
this.loggers[ROOT_LOGGER_NAME] =
|
|
new Logger(ROOT_LOGGER_NAME, undefined, LogLevel.ALL);
|
|
}
|
|
|
|
public getLogger(name: string, threshold?: LogLevel): Logger {
|
|
if (this.loggers.hasOwnProperty(name)) { return this.loggers[name]; }
|
|
|
|
let parentLogger: Logger;
|
|
|
|
const parentLoggerName = Object.keys(this.loggers)
|
|
.filter((n: string) => name.startsWith(n))
|
|
.reduce((acc: string, cur: string) => acc.length > cur.length ? acc : cur, '');
|
|
|
|
if (parentLoggerName) {
|
|
parentLogger = this.loggers[parentLoggerName];
|
|
} else {
|
|
parentLogger = this.ROOT_LOGGER;
|
|
}
|
|
|
|
this.loggers[name] = parentLogger.createChildLogger(name, threshold);
|
|
return this.loggers[name];
|
|
}
|
|
}
|
|
|
|
export const logService = new LogService();
|
|
export default logService;
|