winston-daily-rotate-file:Node.js日志管理的终极轮转解决方案
【免费下载链接】winston-daily-rotate-fileA transport for winston which logs to a rotating file each day.项目地址: https://gitcode.com/gh_mirrors/wi/winston-daily-rotate-file
在Node.js应用开发中,日志管理是确保系统稳定运行和问题排查的关键环节。winston-daily-rotate-file作为winston日志框架的一款强大轮转插件,能够帮助开发者实现日志文件的自动切割、压缩和清理,轻松应对高并发应用的日志管理需求。
为什么选择日志轮转? 🤔
随着应用运行时间增长,单个日志文件会变得越来越大,不仅占用大量磁盘空间,还会导致日志查询和分析变得困难。日志轮转通过以下方式解决这些问题:
- 按时间/大小自动切割:避免单个文件过大
- 自动压缩归档:节省磁盘空间
- 过期日志清理:保持系统整洁
- 分类存储:便于按时间范围查找
快速上手:5分钟安装配置指南 ⚡
1. 环境准备
确保你的项目已安装Node.js(v8.0.0+)和npm,然后通过以下命令安装依赖:
npm install winston winston-daily-rotate-file2. 基础配置示例
创建一个简单的日志配置文件,实现按日轮转、自动压缩和7天日志保留:
const winston = require('winston'); require('winston-daily-rotate-file'); const logger = winston.createLogger({ level: 'info', transports: [ new winston.transports.DailyRotateFile({ filename: 'app-%DATE%.log', datePattern: 'YYYY-MM-DD', zippedArchive: true, maxSize: '20m', maxFiles: '7d' }) ] }); logger.info('应用启动成功'); logger.error('发生错误:数据库连接失败');这段代码会在当前目录生成类似app-2023-10-05.log的日志文件,并在每天零点自动创建新文件。
核心功能详解 🔍
灵活的轮转策略
winston-daily-rotate-file支持多种轮转触发条件,满足不同场景需求:
时间触发:通过
datePattern设置轮转频率,支持:YYYY-MM-DD(按日轮转)YYYY-MM-DD-HH(按小时轮转)MM-DD-YYYY(月-日-年格式)
大小触发:通过
maxSize设置文件大小上限,支持单位:k(KB)- 如100km(MB)- 如20mg(GB)- 如1g
日志归档与清理
- 自动压缩:启用
zippedArchive: true后,轮转后的日志会自动压缩为.gz格式 - 日志保留:通过
maxFiles控制保留数量,支持:- 数字(如
10保留10个文件) - 天数(如
14d保留14天日志)
- 数字(如
高级配置选项
| 选项 | 说明 | 默认值 |
|---|---|---|
dirname | 日志存储目录 | 当前目录 |
createSymlink | 创建指向当前日志的符号链接 | false |
symlinkName | 符号链接名称 | current.log |
utc | 使用UTC时间命名文件 | false |
auditFile | 审计文件路径,用于跟踪日志文件 | 自动生成 |
实战技巧:提升日志管理效率 💡
1. 多级别日志分离
为不同级别日志创建独立的轮转配置,便于问题定位:
// 错误日志单独存储 const errorTransport = new winston.transports.DailyRotateFile({ level: 'error', filename: 'error-%DATE%.log', datePattern: 'YYYY-MM-DD', maxFiles: '30d' }); // 普通日志 const infoTransport = new winston.transports.DailyRotateFile({ level: 'info', filename: 'app-%DATE%.log', datePattern: 'YYYY-MM-DD', maxFiles: '14d' });2. 监听轮转事件
通过事件监听实现自定义逻辑,如轮转通知或日志分析:
const transport = new winston.transports.DailyRotateFile({/* 配置 */}); transport.on('rotate', (oldFilename, newFilename) => { // 轮转时执行,如发送通知 console.log(`日志已轮转:${oldFilename} -> ${newFilename}`); }); transport.on('archive', (zipFilename) => { // 日志归档时执行 console.log(`日志已压缩:${zipFilename}`); });3. TypeScript支持
项目提供完整类型定义,可直接在TypeScript项目中使用:
import * as winston from 'winston'; import DailyRotateFile from 'winston-daily-rotate-file'; const transport: DailyRotateFile = new DailyRotateFile({ filename: 'app-%DATE%.log', datePattern: 'YYYY-MM-DD' });常见问题解答 ❓
Q: 如何迁移到v5版本?
A: v5版本引入了错误事件机制,建议添加错误监听:
transport.on('error', (error) => { console.error('日志传输错误:', error); });Q: 如何自定义日志格式?
A: 结合winston的format API实现自定义格式:
const { format } = winston; const logFormat = format.combine( format.timestamp(), format.json() ); // 在transport中使用 new winston.transports.DailyRotateFile({ format: logFormat, // 其他配置 })Q: 可以同时按大小和时间轮转吗?
A: 可以!设置maxSize和datePattern后,任一条件满足都会触发轮转。
总结
winston-daily-rotate-file为Node.js应用提供了专业级的日志轮转解决方案,通过简单配置即可实现日志的自动管理。无论是小型项目还是高并发应用,都能有效提升日志系统的可靠性和可维护性。
要开始使用这个强大的工具,只需执行:
git clone https://gitcode.com/gh_mirrors/wi/winston-daily-rotate-file立即体验日志管理的便捷与高效!
【免费下载链接】winston-daily-rotate-fileA transport for winston which logs to a rotating file each day.项目地址: https://gitcode.com/gh_mirrors/wi/winston-daily-rotate-file
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考