/// import { EventEmitter } from "events"; import * as spdlog from "spdlog"; import { ServerProxy } from "../../common/proxy"; // tslint:disable completed-docs export class RotatingLoggerProxy extends ServerProxy { public constructor(private readonly logger: spdlog.RotatingLogger) { super({ bindEvents: [], doneEvents: ["dispose"], instance: new EventEmitter(), }); } 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 dispose(): Promise { await this.flush(); this.instance.emit("dispose"); await super.dispose(); } } 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); } }