65 lines
1.7 KiB
TypeScript
65 lines
1.7 KiB
TypeScript
|
type LogLevel = "DEBUG" | "INFO" | "WARN" | "ERROR" | "CRITICAL";
|
||
|
|
||
|
export interface LogEntry {
|
||
|
level: LogLevel;
|
||
|
message: string;
|
||
|
timestamp: number;
|
||
|
}
|
||
|
|
||
|
export class LogcatServiceClass {
|
||
|
private logs: LogEntry[] = [];
|
||
|
private lastLogTimestamp: number | null = null;
|
||
|
private listeners: (() => void)[] = [];
|
||
|
|
||
|
constructor() {
|
||
|
this.log("LogcatService initialised", "INFO");
|
||
|
}
|
||
|
|
||
|
addListener(callback: () => void) {
|
||
|
this.listeners.push(callback);
|
||
|
}
|
||
|
|
||
|
removeListener(callback: () => void) {
|
||
|
this.listeners = this.listeners.filter((listener) => listener !== callback);
|
||
|
}
|
||
|
|
||
|
private notifyListeners() {
|
||
|
this.listeners.forEach((listener) => listener());
|
||
|
}
|
||
|
|
||
|
log(message: string, level: LogLevel = "INFO"): void {
|
||
|
const currentTimestamp = new Date().getTime();
|
||
|
const timeSinceLastLog = this.lastLogTimestamp ? currentTimestamp - this.lastLogTimestamp : 0;
|
||
|
|
||
|
const logEntry: LogEntry = { message, level, timestamp: timeSinceLastLog };
|
||
|
this.logs.push(logEntry);
|
||
|
|
||
|
switch (level) {
|
||
|
case "DEBUG":
|
||
|
console.debug(`> [${level}] ${message} (+${timeSinceLastLog}ms)`);
|
||
|
break;
|
||
|
case "INFO":
|
||
|
console.info(`> [${level}] ${message} (+${timeSinceLastLog}ms)`);
|
||
|
break;
|
||
|
case "WARN":
|
||
|
console.warn(`> [${level}] ${message} (+${timeSinceLastLog}ms)`);
|
||
|
break;
|
||
|
case "ERROR":
|
||
|
console.error(`> [${level}] ${message} (+${timeSinceLastLog}ms)`);
|
||
|
break;
|
||
|
case "CRITICAL":
|
||
|
console.error(`> [${level}] ${message} (+${timeSinceLastLog}ms)`);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
this.lastLogTimestamp = currentTimestamp;
|
||
|
this.notifyListeners();
|
||
|
}
|
||
|
|
||
|
getLogs(): LogEntry[] {
|
||
|
return this.logs;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export const logcat = new LogcatServiceClass();
|