Logger.ts•2.18 kB
/**
* 日志管理类
* 基于 Winston 的日志系统
*/
import winston from 'winston';
import { Config } from '../config/Config';
export class Logger {
private static instance: Logger;
private logger: winston.Logger;
private constructor() {
const config = Config.getInstance().getLogConfig();
const transports: winston.transport[] = [];
// 控制台输出
if (config.console) {
transports.push(
new winston.transports.Console({
format: winston.format.combine(
winston.format.colorize(),
winston.format.timestamp(),
winston.format.printf(({ timestamp, level, message, ...meta }) => {
return `${timestamp} [${level}]: ${message} ${
Object.keys(meta).length ? JSON.stringify(meta, null, 2) : ''
}`;
})
),
})
);
}
// 文件输出
if (config.file) {
transports.push(
new winston.transports.File({
filename: config.file,
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
})
);
}
this.logger = winston.createLogger({
level: config.level,
format: winston.format.combine(
winston.format.timestamp(),
winston.format.errors({ stack: true }),
winston.format.json()
),
transports,
exitOnError: false,
});
}
public static getInstance(): Logger {
if (!Logger.instance) {
Logger.instance = new Logger();
}
return Logger.instance;
}
public info(message: string, meta?: any): void {
this.logger.info(message, meta);
}
public error(message: string, meta?: any): void {
this.logger.error(message, meta);
}
public warn(message: string, meta?: any): void {
this.logger.warn(message, meta);
}
public debug(message: string, meta?: any): void {
this.logger.debug(message, meta);
}
public verbose(message: string, meta?: any): void {
this.logger.verbose(message, meta);
}
public getWinstonLogger(): winston.Logger {
return this.logger;
}
}