Ubuntu Node.js日志轮转技巧
导读:使用 logrotate 工具(系统级日志轮转) logrotate 是 Ubuntu 系统自带的日志管理工具,可自动处理 Node.js 应用日志的轮转、压缩和清理,无需修改应用代码。 安装 logrotate:若未安装,通过以下命令安...
使用 logrotate 工具(系统级日志轮转)
logrotate 是 Ubuntu 系统自带的日志管理工具,可自动处理 Node.js 应用日志的轮转、压缩和清理,无需修改应用代码。
- 安装 logrotate:若未安装,通过以下命令安装:
sudo apt-get update & & sudo apt-get install logrotate - 创建配置文件:在
/etc/logrotate.d/目录下新建针对 Node.js 应用的配置文件(如nodejs-app):sudo nano /etc/logrotate.d/nodejs-app - 配置参数说明:在配置文件中添加以下内容(根据实际路径调整):
/path/to/your/nodejs/app/*.log { daily # 每天轮转一次(可选:weekly/monthly) rotate 7 # 保留最近7个轮转文件 compress # 压缩旧日志(节省空间) delaycompress # 延迟压缩(如第8个文件才压缩第1个) missingok # 日志文件不存在时不报错 notifempty # 日志为空时不轮转 create 0640 root adm # 新日志文件权限(属主root,属组adm) sharedscripts # 多个日志文件匹配时,postrotate仅执行一次 postrotate # 若应用由systemd管理,建议用systemctl重启(避免kill进程) systemctl restart your-nodejs-app.service # 若直接通过进程ID启动,可注释上方行,取消下方注释 # kill -HUP `cat /path/to/your/nodejs/app/pidfile` endscript } - 测试配置:手动触发轮转以验证配置是否正确:
sudo logrotate -f /etc/logrotate.d/nodejs-app - 自动运行:logrotate 默认通过系统 cron 任务(
/etc/cron.daily/logrotate)每天自动执行,无需额外配置。
使用 Winston + winston-daily-rotate-file(应用层日志轮转)
若需更灵活的控制(如按文件大小轮转、自定义日志格式),可使用 Winston 日志库结合 winston-daily-rotate-file 插件,实现应用内日志轮转。
- 安装依赖:
npm install winston winston-daily-rotate-file - 配置示例:
const winston = require('winston'); const DailyRotateFile = require('winston-daily-rotate-file'); const transport = new DailyRotateFile({ filename: '/path/to/your/logs/application-%DATE%.log', // 日志文件名(含日期占位符) datePattern: 'YYYY-MM-DD', // 日期格式(每天一个文件) zippedArchive: true, // 压缩旧日志 maxSize: '20m', // 单个文件最大大小(超过则轮转) maxFiles: '14d', // 保留最近14天的日志 createSymlink: true, // 创建符号链接(指向最新日志) symlinkName: 'current.log' // 符号链接名称 } ); const logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' } ), // 添加时间戳 winston.format.json() // JSON格式输出 ), transports: [transport] // 使用轮转传输 } ); // 测试日志 logger.info('This is a rotated log message.'); - 优势:可根据业务需求调整轮转条件(如按大小、时间),支持多传输目标(如同时输出到控制台和文件),适合需要精细化管理的应用。
使用 Pino + pino-rotate(高性能日志轮转)
若应用对日志性能要求极高(如实时性强的微服务),可使用 Pino 日志库(Node.js 性能最高的日志库)结合 pino-rotate 插件,实现高效的日志轮转。
- 安装依赖:
npm install pino pino-rotate - 配置示例:
const pino = require('pino'); const rotate = require('pino-rotate'); const logger = pino({ level: 'info', transport: { target: 'pino-pretty', // 可选:美化输出(开发环境使用) options: { colorize: true } } } ); // 启动轮转(每天轮转,保留14天,压缩旧日志) rotate({ period: '1d', // 轮转周期(1d=每天) path: '/path/to/your/logs/pino-', // 日志路径前缀 maxsize: '20m', // 单个文件最大大小 compress: true // 压缩旧日志 } )(logger); // 测试日志 logger.info('This is a high-performance rotated log message.'); - 优势:Pino 采用二进制 JSON 格式,日志写入速度远快于其他库(约 10 倍于 Winston),适合高并发场景;
pino-rotate支持按时间和大小轮转,兼顾性能与管理需求。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Node.js日志轮转技巧
本文地址: https://pptw.com/jishu/739533.html
