bodhi-node-profiler
Version:
A lightweight, zero-configuration performance profiler for Node.js applications with real-time dashboard
60 lines (52 loc) • 1.39 kB
text/typescript
import winston from 'winston';
import path from 'path';
import fs from 'fs';
export class Logger {
private logger!: winston.Logger; // Using definite assignment assertion
private logPath: string;
constructor(logPath: string) {
this.logPath = logPath;
this.ensureLogDirectory();
this.initializeLogger();
}
private ensureLogDirectory(): void {
if (!fs.existsSync(this.logPath)) {
fs.mkdirSync(this.logPath, { recursive: true });
}
}
private initializeLogger(): void {
this.logger = winston.createLogger({
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [
new winston.transports.File({
filename: path.join(this.logPath, 'error.log'),
level: 'error'
}),
new winston.transports.File({
filename: path.join(this.logPath, 'profiler.log')
})
]
});
if (process.env.NODE_ENV !== 'production') {
this.logger.add(new winston.transports.Console({
format: winston.format.simple()
}));
}
}
public log(type: string, data: Record<string, any>): void {
this.logger.info({
type,
...data
});
}
public error(type: string, error: Error): void {
this.logger.error({
type,
message: error.message,
stack: error.stack
});
}
}