使用指南:winston-daily-rotate-file
日志管理库
1. 项目介绍
winston-daily-rotate-file
是一个基于 winston
的日志记录器扩展,它允许你设置文件滚动策略,以每天、小时或其他自定义时间间隔创建新的日志文件。这个库特别适合在生产环境中跟踪应用程序的行为,错误和事件流,因为它可以防止单个日志文件过大且易于管理。
2. 项目快速启动
首先,确保你的项目安装了 winston
和 winston-daily-rotate-file
:
npm install winston winston-daily-rotate-file
然后,在你的项目中引入这两个库并配置日志器:
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.printf(info => `[${info.timestamp}] ${info.level}: ${info.message}`)
),
transports: [
new winston.transports.Console(),
new DailyRotateFile({
filename: 'logs/application-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '7d'
})
]
});
module.exports = logger;
上面的示例设置了两个运输层:控制台传输和按日期旋转的日志文件传输。日志文件将在每天结束时重命名,并压缩旧文件。
3. 应用案例和最佳实践
仅在调试模式下记录
if (process.env.NODE_ENV === 'development') {
logger.info('Debugging messages enabled');
}
记录错误
try {
// Code execution
} catch (error) {
logger.error(`An error occurred: ${error.message}`);
}
捕获未预期的代码行为
const result = someFunction();
if (result !== expectedResult) {
logger.warn(`Unexpected behavior detected: Expected ${expectedResult}, got ${result}`);
}
重要事件记录
logger.info('Important event:', { details: 'Some details about the event' });
4. 典型生态项目
- Express: 结合 Express 框架记录请求和响应信息。
- Mongoose: 在数据库操作成功或失败时记录日志。
- PM2: 与 PM2 进程管理器集成,自动重新加载日志配置并在进程重启时保留日志。
- NestJS: 在 NestJS 微服务和应用程序中用于详细的日志记录。
在实际应用中,你可以结合其他中间件和工具进一步优化日志管理和监控,比如使用 AWS S3 或云存储服务进行备份,或者设置实时日志分析系统等。