vaporwaver-ts
Version:
TypeScript version of the Vaporwaver Python library. Vaporwaver is a Python library for generating vaporwave image art.
78 lines (61 loc) • 2.27 kB
text/typescript
import { writeFileSync, appendFileSync, existsSync, mkdirSync } from 'fs';
import { join, dirname } from 'path';
import { fileURLToPath } from 'url';
export class Logger {
private static instance: Logger;
private logFile: string;
private debugMode: boolean;
private constructor() {
const rootDir = dirname(fileURLToPath(import.meta.url));
const logsDir = join(rootDir, '..', '..', 'logs');
// Ensure logs directory exists
if (!existsSync(logsDir)) {
mkdirSync(logsDir, { recursive: true });
}
this.logFile = join(logsDir, 'vaporwaver.log');
this.debugMode = process.env.VAPORWAVER_DEBUG === 'true';
// Initialize log file
if (!existsSync(this.logFile)) {
writeFileSync(this.logFile, '');
}
}
static getInstance(): Logger {
if (!Logger.instance) {
Logger.instance = new Logger();
}
return Logger.instance;
}
private formatMessage(level: string, message: string, meta?: any): string {
const timestamp = new Date().toISOString();
const metaStr = meta ? `\n${JSON.stringify(meta, null, 2)}` : '';
return `[${timestamp}] ${level}: ${message}${metaStr}\n`;
}
private log(level: string, message: string, meta?: any): void {
const formattedMessage = this.formatMessage(level, message, meta);
appendFileSync(this.logFile, formattedMessage);
if (this.debugMode || level === 'ERROR') {
console.log(formattedMessage);
}
}
info(message: string, meta?: any): void {
this.log('INFO', message, meta);
}
warn(message: string, meta?: any): void {
this.log('WARN', message, meta);
}
error(message: string, meta?: any): void {
this.log('ERROR', message, meta);
}
debug(message: string, meta?: any): void {
if (this.debugMode) {
this.log('DEBUG', message, meta);
}
}
clearLogs(): void {
writeFileSync(this.logFile, '');
}
setDebugMode(enabled: boolean): void {
this.debugMode = enabled;
}
}
export const logger = Logger.getInstance();