/**
* 日志工具模块
*/
import winston from 'winston';
import { ILogger } from '@/types';
/**
* 日志级别
*/
export enum LogLevel {
DEBUG = 'debug',
INFO = 'info',
WARN = 'warn',
ERROR = 'error'
}
/**
* Winston日志器实现
*/
export class WinstonLogger implements ILogger {
private logger: winston.Logger;
private context?: string;
constructor(context?: string) {
this.context = context;
this.logger = winston.createLogger({
level: process.env.LOG_LEVEL || LogLevel.INFO,
format: winston.format.combine(
winston.format.timestamp(),
winston.format.errors({ stack: true }),
winston.format.json()
),
defaultMeta: this.context ? { context: this.context } : {},
transports: [
new winston.transports.File({
filename: 'logs/error.log',
level: LogLevel.ERROR
}),
new winston.transports.File({
filename: 'logs/combined.log'
})
]
});
}
debug(message: string, meta?: any): void {
this.logger.debug(message, meta);
}
info(message: string, meta?: any): void {
this.logger.info(message, meta);
}
warn(message: string, meta?: any): void {
this.logger.warn(message, meta);
}
error(message: string, error?: Error, meta?: any): void {
if (error) {
this.logger.error(message, { error: error.stack, ...meta });
} else {
this.logger.error(message, meta);
}
}
setLevel(level: string): void {
this.logger.level = level;
}
createChild(context: string): ILogger {
return new WinstonLogger(this.context ? `${this.context}:${context}` : context);
}
}
/**
* 默认日志器实例
*/
export const logger = new WinstonLogger('MCP2Serial');
/**
* 创建日志器
*/
export function createLogger(context: string): ILogger {
return new WinstonLogger(context);
}