71 lines
2.4 KiB
TypeScript
71 lines
2.4 KiB
TypeScript
import { LogAggregator, LogSourceOptions } from './LogAggregator';
|
|
|
|
export enum LogLevel {
|
|
Debug = 'debug',
|
|
Info = 'info',
|
|
Log = 'log',
|
|
Warn = 'warn',
|
|
Error = 'error',
|
|
}
|
|
|
|
export type ComponentLoggerOptions = {
|
|
styles?: {
|
|
[x in LogLevel]?: string;
|
|
}
|
|
}
|
|
|
|
export class ComponentLogger {
|
|
private logAggregator: LogAggregator;
|
|
private component: string;
|
|
private componentOptions?: ComponentLoggerOptions;
|
|
|
|
constructor(logAggregator: LogAggregator, component: string, componentOptions?: ComponentLoggerOptions) {
|
|
this.logAggregator = logAggregator;
|
|
this.component = component;
|
|
}
|
|
|
|
private handleLog(logLevel: LogLevel, sourceFunction: string | LogSourceOptions, ...message: any) {
|
|
let functionSource = typeof sourceFunction === 'string' ? sourceFunction : sourceFunction?.src;
|
|
|
|
let consoleMessageString = `[${this.component}${functionSource ? `::${functionSource}` : ''}] `;
|
|
const consoleMessageData = []
|
|
|
|
for (const m of message) {
|
|
if (typeof m === 'string') {
|
|
consoleMessageString = `${consoleMessageString} ${m}`;
|
|
} else if (typeof m === 'number') {
|
|
consoleMessageString = `${consoleMessageString} %f`;
|
|
} else if (m instanceof HTMLElement) {
|
|
consoleMessageString = `${consoleMessageString} %o`;
|
|
} else {
|
|
consoleMessageString = `${consoleMessageString} %O`;
|
|
}
|
|
}
|
|
|
|
const style = this.componentOptions?.styles?.[logLevel] ?? this.componentOptions?.styles?.[LogLevel.Log];
|
|
if (style) {
|
|
consoleMessageString = `%c${consoleMessageString}`;
|
|
consoleMessageData.unshift(style);
|
|
}
|
|
|
|
this.logAggregator.log(this.component, logLevel, typeof sourceFunction === 'object' ? sourceFunction : undefined, consoleMessageString, ...consoleMessageData);
|
|
}
|
|
|
|
debug(sourceFunction: string | LogSourceOptions, ...message: any[]) {
|
|
this.handleLog(LogLevel.Debug, sourceFunction, ...message);
|
|
}
|
|
info(sourceFunction: string | LogSourceOptions, ...message: any[]) {
|
|
this.handleLog(LogLevel.Info, sourceFunction, ...message);
|
|
}
|
|
log(sourceFunction: string | LogSourceOptions, ...message: any[]) {
|
|
this.handleLog(LogLevel.Log, sourceFunction, ...message);
|
|
}
|
|
warn(sourceFunction: string | LogSourceOptions, ...message: any[]) {
|
|
this.handleLog(LogLevel.Warn, sourceFunction, ...message);
|
|
}
|
|
error(sourceFunction: string | LogSourceOptions, ...message: any[]) {
|
|
this.handleLog(LogLevel.Error, sourceFunction, ...message);
|
|
}
|
|
|
|
}
|