1
0
Fork 0
mirror of https://gitlab.com/futo-org/fcast.git synced 2025-06-24 21:25:23 +00:00
fcast/receivers/common/web/Logger.ts
2025-05-09 10:44:26 -05:00

204 lines
8.5 KiB
TypeScript

export enum LoggerType {
BACKEND,
FRONTEND,
}
export class Logger {
private static log4js = null;
private static ipcLoggerTags = {
trace: [],
debug: [],
info: [],
warn: [],
error: [],
fatal: [],
};
private funcTable = {
trace: console.trace,
debug: console.debug,
info: console.log,
warn: console.warn,
error: console.error,
fatal: console.error,
};
public static initialize(config: any) {
// @ts-ignore
if (TARGET === 'electron') {
// @ts-ignore
const electronAPI = __non_webpack_require__('electron');
// @ts-ignore
Logger.log4js = __non_webpack_require__('log4js');
Logger.log4js.configure(config);
let logger = Logger.log4js.getLogger();
electronAPI.ipcMain.on('logger-trace', (event, value) => {
if (!Logger.ipcLoggerTags.trace.includes(value.tag)) {
Logger.ipcLoggerTags.trace.push(value.tag);
logger = Logger.log4js.getLogger(value.tag);
}
logger.info(value.message, ...value.optionalParams);
});
electronAPI.ipcMain.on('logger-debug', (event, value) => {
if (!Logger.ipcLoggerTags.debug.includes(value.tag)) {
Logger.ipcLoggerTags.debug.push(value.tag);
logger = Logger.log4js.getLogger(value.tag);
}
logger.info(value.message, ...value.optionalParams);
});
electronAPI.ipcMain.on('logger-info', (event, value) => {
if (!Logger.ipcLoggerTags.info.includes(value.tag)) {
Logger.ipcLoggerTags.info.push(value.tag);
logger = Logger.log4js.getLogger(value.tag);
}
logger.info(value.message, ...value.optionalParams);
});
electronAPI.ipcMain.on('logger-warn', (event, value) => {
if (!Logger.ipcLoggerTags.warn.includes(value.tag)) {
Logger.ipcLoggerTags.warn.push(value.tag);
logger = Logger.log4js.getLogger(value.tag);
}
logger.warn(value.message, ...value.optionalParams);
});
electronAPI.ipcMain.on('logger-error', (event, value) => {
if (!Logger.ipcLoggerTags.error.includes(value.tag)) {
Logger.ipcLoggerTags.error.push(value.tag);
logger = Logger.log4js.getLogger(value.tag);
}
logger.error(value.message, ...value.optionalParams);
});
electronAPI.ipcMain.on('logger-fatal', (event, value) => {
if (!Logger.ipcLoggerTags.fatal.includes(value.tag)) {
Logger.ipcLoggerTags.fatal.push(value.tag);
logger = Logger.log4js.getLogger(value.tag);
}
logger.fatal(value.message, ...value.optionalParams);
});
}
}
constructor(tag: string = 'default', type: LoggerType = LoggerType.FRONTEND) {
// @ts-ignore
if (TARGET === 'electron') {
if (type === LoggerType.BACKEND) {
// log4js should be initialized via the static method, but providing fallback when logger is used
// before initialization as done currently by the Store module on startup.
if (!Logger.log4js) {
// @ts-ignore
Logger.log4js = __non_webpack_require__('log4js');
}
const logger = Logger.log4js.getLogger(tag);
this.funcTable = {
trace: (message?: any, ...optionalParams: any[]) => {
logger.trace(message, ...optionalParams);
},
debug: (message?: any, ...optionalParams: any[]) => {
logger.debug(message, ...optionalParams);
},
info: (message?: any, ...optionalParams: any[]) => {
logger.info(message, ...optionalParams);
},
warn: (message?: any, ...optionalParams: any[]) => {
logger.warn(message, ...optionalParams);
},
error: (message?: any, ...optionalParams: any[]) => {
logger.error(message, ...optionalParams);
},
fatal: (message?: any, ...optionalParams: any[]) => {
logger.fatal(message, ...optionalParams);
},
};
}
else if (type === LoggerType.FRONTEND) {
// @ts-ignore
const electronAPI = __non_webpack_require__('electron');
this.funcTable = {
trace: (message?: any, ...optionalParams: any[]) => {
console.trace(message, ...optionalParams);
electronAPI.ipcRenderer.send('logger-trace', { tag: tag, message: message, optionalParams: optionalParams });
},
debug: (message?: any, ...optionalParams: any[]) => {
console.debug(message, ...optionalParams);
electronAPI.ipcRenderer.send('logger-debug', { tag: tag, message: message, optionalParams: optionalParams });
},
info: (message?: any, ...optionalParams: any[]) => {
console.log(message, ...optionalParams);
electronAPI.ipcRenderer.send('logger-info', { tag: tag, message: message, optionalParams: optionalParams });
},
warn: (message?: any, ...optionalParams: any[]) => {
console.warn(message, ...optionalParams);
electronAPI.ipcRenderer.send('logger-warn', { tag: tag, message: message, optionalParams: optionalParams });
},
error: (message?: any, ...optionalParams: any[]) => {
console.error(message, ...optionalParams);
electronAPI.ipcRenderer.send('logger-error', { tag: tag, message: message, optionalParams: optionalParams });
},
fatal: (message?: any, ...optionalParams: any[]) => {
console.error(message, ...optionalParams);
electronAPI.ipcRenderer.send('logger-fatal', { tag: tag, message: message, optionalParams: optionalParams });
},
};
}
// @ts-ignore
} else if (TARGET === 'webOS' || TARGET === 'tizenOS') {
this.funcTable = {
trace: (message?: any, ...optionalParams: any[]) => console.trace(message, ...optionalParams),
debug: (message?: any, ...optionalParams: any[]) => console.log(message, ...optionalParams),
info: (message?: any, ...optionalParams: any[]) => console.log(message, ...optionalParams),
warn: (message?: any, ...optionalParams: any[]) => console.warn(message, ...optionalParams),
error: (message?: any, ...optionalParams: any[]) => console.error(message, ...optionalParams),
fatal: (message?: any, ...optionalParams: any[]) => console.error(message, ...optionalParams),
};
} else {
// @ts-ignore
console.warn(`Attempting to initialize logger on unsupported target: ${TARGET}`);
}
}
public trace(message?: any, ...optionalParams: any[]): void {
this.funcTable.trace(message, ...optionalParams);
}
public debug(message?: any, ...optionalParams: any[]): void {
this.funcTable.debug(message, ...optionalParams);
}
public info(message?: any, ...optionalParams: any[]): void {
this.funcTable.info(message, ...optionalParams);
}
public warn(message?: any, ...optionalParams: any[]): void {
this.funcTable.warn(message, ...optionalParams);
}
public error(message?: any, ...optionalParams: any[]): void {
this.funcTable.error(message, ...optionalParams);
}
public fatal(message?: any, ...optionalParams: any[]): void {
this.funcTable.fatal(message, ...optionalParams);
}
public shutdown() {
// @ts-ignore
if (TARGET === 'electron') {
Logger.log4js.shutdown();
}
}
}