///
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);
}
}