Improve logger API

This commit is contained in:
Andras Schmelczer 2025-02-22 15:09:05 +00:00
commit d965265709
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C

View file

@ -21,41 +21,27 @@ export class LogLine {
} }
export class Logger { export class Logger {
private static readonly MAX_MESSAGES = 1000; private static readonly MAX_MESSAGES = 10000;
private static instance: Logger | null = null;
private readonly messages: LogLine[] = []; private readonly messages: LogLine[] = [];
private readonly onMessageListeners: ((message: LogLine) => void)[] = [];
private readonly onMessageListeners: (( public constructor(...onMessageListeners: ((message: LogLine) => void)[]) {
status: LogLine | undefined this.onMessageListeners = onMessageListeners;
) => void)[] = [];
private constructor() {} // eslint-disable-line @typescript-eslint/no-empty-function
public static getInstance(): Logger {
if (!Logger.instance) {
Logger.instance = new Logger();
}
return Logger.instance;
} }
public debug(message: string): void { public debug(message: string): void {
console.debug(message);
this.pushMessage(message, LogLevel.DEBUG); this.pushMessage(message, LogLevel.DEBUG);
} }
public info(message: string): void { public info(message: string): void {
console.info(message);
this.pushMessage(message, LogLevel.INFO); this.pushMessage(message, LogLevel.INFO);
} }
public warn(message: string): void { public warn(message: string): void {
console.warn(message);
this.pushMessage(message, LogLevel.WARNING); this.pushMessage(message, LogLevel.WARNING);
} }
public error(message: string): void { public error(message: string): void {
console.error(message);
this.pushMessage(message, LogLevel.ERROR); this.pushMessage(message, LogLevel.ERROR);
} }
@ -67,17 +53,13 @@ export class Logger {
); );
} }
public addOnMessageListener( public addOnMessageListener(listener: (message: LogLine) => void): void {
listener: (message: LogLine | undefined) => void
): void {
this.onMessageListeners.push(listener); this.onMessageListeners.push(listener);
} }
public reset(): void { public reset(): void {
this.messages.length = 0; this.messages.length = 0;
this.onMessageListeners.forEach((listener) => { this.debug("Logger has been reset");
listener(undefined);
});
} }
private pushMessage(message: string, level: LogLevel): void { private pushMessage(message: string, level: LogLevel): void {