logger.ts•1.59 kB
import winston from 'winston';
import { Logger, LogLevel } from '../types/index.js';
class WinstonLogger implements Logger {
private logger: winston.Logger;
constructor(level: LogLevel = 'info') {
this.logger = winston.createLogger({
level,
format: winston.format.combine(
winston.format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss',
}),
winston.format.errors({ stack: true }),
winston.format.json(),
winston.format.prettyPrint()
),
defaultMeta: {
service: 'mcp-vps-initialize',
},
transports: [
new winston.transports.File({
filename: 'logs/error.log',
level: 'error',
}),
new winston.transports.File({
filename: 'logs/combined.log',
}),
new winston.transports.Console({
format: winston.format.combine(winston.format.colorize(), winston.format.simple()),
}),
],
});
}
error(message: string, meta: Record<string, unknown> = {}): void {
this.logger.error(message, meta);
}
warn(message: string, meta: Record<string, unknown> = {}): void {
this.logger.warn(message, meta);
}
info(message: string, meta: Record<string, unknown> = {}): void {
this.logger.info(message, meta);
}
debug(message: string, meta: Record<string, unknown> = {}): void {
this.logger.debug(message, meta);
}
setLevel(level: LogLevel): void {
this.logger.level = level;
}
}
// Export singleton instance
export const logger = new WinstonLogger();
export { WinstonLogger };