const winston = require('winston');
|
require('winston-daily-rotate-file');
|
|
|
function formatDate(date) {
|
const year = date.getFullYear();
|
const month = String(date.getMonth() + 1).padStart(2, '0');
|
const day = String(date.getDate()).padStart(2, '0');
|
const hours = String(date.getHours()).padStart(2, '0');
|
const minutes = String(date.getMinutes()).padStart(2, '0');
|
const seconds = String(date.getSeconds()).padStart(2, '0');
|
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
}
|
// 配置日志格式
|
const logger = winston.createLogger({
|
level: 'info',
|
format: winston.format.combine(
|
winston.format.timestamp(),
|
winston.format.printf(info => `${formatDate(new Date(info.timestamp))} [${info.level}] ${info.message}`)
|
),
|
transports: [
|
// 输出到控制台(可选)
|
new winston.transports.Console({
|
format: winston.format.combine(
|
winston.format.colorize(),
|
winston.format.printf(info => `${info.timestamp} [${info.level}] ${info.message}`)
|
)
|
}),
|
// 每天轮转的日志文件
|
new winston.transports.DailyRotateFile({
|
filename: 'logs/info-%DATE%.log', // 日志文件名模式
|
datePattern: 'YYYY-MM-DD', // 日期格式
|
zippedArchive: true, // 归档旧日志文件时压缩
|
maxSize: '20m', // 文件最大大小
|
maxFiles: '14d', // 保留最近14天的日志文件
|
level: 'info' // 设置此传输的最低日志级别
|
}),
|
// 错误日志文件
|
new winston.transports.DailyRotateFile({
|
filename: 'logs/error-%DATE%.log', // 错误日志文件名模式
|
datePattern: 'YYYY-MM-DD', // 日期格式
|
zippedArchive: true, // 归档旧日志文件时压缩
|
maxSize: '20m', // 文件最大大小
|
maxFiles: '14d', // 保留最近14天的日志文件
|
level: 'error' // 设置此传输的最低日志级别为 error
|
})
|
]
|
});
|
|
// 导出日志函数
|
module.exports = {
|
info: (message) => logger.info(message),
|
warn: (message) => logger.warn(message),
|
error: (message) => logger.error(message)
|
};
|