/// import { EventEmitter } from "events"; import * as spdlog from "spdlog"; import { ServerProxy } from "../../common/proxy"; // tslint:disable completed-docs export class RotatingLoggerProxy implements ServerProxy { private readonly emitter = new EventEmitter(); public constructor(private readonly logger: spdlog.RotatingLogger) {} public async trace (message: string): Promise { this.logger.trace(message); } public async debug (message: string): Promise { this.logger.debug(message); } public async info (message: string): Promise { this.logger.info(message); } public async warn (message: string): Promise { this.logger.warn(message); } public async error (message: string): Promise { this.logger.error(message); } public async critical (message: string): Promise { this.logger.critical(message); } public async setLevel (level: number): Promise { this.logger.setLevel(level); } public async clearFormatters (): Promise { this.logger.clearFormatters(); } public async flush (): Promise { this.logger.flush(); } public async drop (): Promise { this.logger.drop(); } public async onDone(cb: () => void): Promise { this.emitter.on("dispose", cb); } public async dispose(): Promise { await this.flush(); this.emitter.emit("dispose"); this.emitter.removeAllListeners(); } // tslint:disable-next-line no-any public async onEvent(_cb: (event: string, ...args: any[]) => void): Promise { // No events. } } export class SpdlogModuleProxy { public async createLogger(name: string, filePath: string, fileSize: number, fileCount: number): Promise { return new RotatingLoggerProxy(new (require("spdlog") as typeof import("spdlog")).RotatingLogger(name, filePath, fileSize, fileCount)); } public async setAsyncMode(bufferSize: number, flushInterval: number): Promise { require("spdlog").setAsyncMode(bufferSize, flushInterval); } }