Ubuntu Node.js日志轮转配置指南
Ubuntu Node.js日志轮转配置指南
在Ubuntu系统中,Node.js应用程序的日志轮转可通过logrotate工具(系统自带)或Node.js日志库内置功能实现。以下是详细配置步骤及注意事项:
一、使用logrotate工具配置(系统级推荐)
logrotate是Ubuntu默认的日志管理工具,支持自动轮转、压缩、删除旧日志,适用于大多数Node.js应用。
1. 安装logrotate
多数Ubuntu版本已预装logrotate,未安装时可通过以下命令安装:
sudo apt-get update
sudo apt-get install logrotate
2. 创建Node.js专用配置文件
在/etc/logrotate.d/
目录下创建新配置文件(如nodejs
),用于定义Node.js日志的轮转规则:
sudo nano /etc/logrotate.d/nodejs
3. 配置日志轮转规则
在配置文件中添加以下内容(根据实际路径修改/path/to/your/nodejs/app/logs/*.log
):
/path/to/your/nodejs/app/logs/*.log {
daily # 每日轮转(可选:weekly/monthly)
rotate 7 # 保留7个轮转后的日志文件
compress # 压缩旧日志(节省空间)
delaycompress # 延迟压缩(当前轮转的日志不压缩,下次轮转时再压缩)
missingok # 日志文件不存在时不报错
notifempty # 日志为空时不轮转
create 0640 root adm # 创建新日志文件,权限0640,属主root,属组adm
sharedscripts # 多个日志文件匹配时,只执行一次postrotate脚本
postrotate
# 若使用systemd管理Node.js应用,可重启服务以释放日志句柄
systemctl restart your-nodejs-app.service
# 或发送HUP信号给Node.js进程(需替换为实际PID文件路径)
# kill -HUP `cat /path/to/your/nodejs/app/pidfile`
endscript
}
4. 测试配置有效性
使用-f
参数强制执行轮转(模拟自动执行),检查是否有错误:
sudo logrotate -f /etc/logrotate.d/nodejs
5. 验证自动执行
logrotate默认通过/etc/cron.daily/logrotate
每日自动运行,可通过以下命令查看轮转状态:
tail -f /var/log/logrotate.log
二、使用Node.js日志库内置轮转(应用级控制)
若需更细粒度的轮转控制(如按文件大小、时间动态轮转),可使用winston
+winston-daily-rotate-file
或pino
等库。
1. 安装依赖库
以winston
为例,安装所需模块:
npm install winston winston-daily-rotate-file
2. 配置日志轮转
在Node.js应用代码中添加以下配置(示例):
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: '/path/to/your/nodejs/app/logs/application-%DATE%.log', // 日志文件名(含日期占位符)
datePattern: 'YYYY-MM-DD', // 日期格式
zippedArchive: true, // 压缩旧日志
maxSize: '20m', // 单个日志文件最大20MB
maxFiles: '14d', // 保留14天内的日志
level: 'info' // 日志级别
}
);
const logger = winston.createLogger({
format: winston.format.json(), // 日志格式(JSON)
transports: [transport] // 添加传输层
}
);
logger.info('Hello, this is a rotated log message!');
3. 测试应用日志
运行Node.js应用,检查/path/to/your/nodejs/app/logs/
目录下是否生成带日期的日志文件(如application-2025-10-20.log
)。
三、使用PM2管理日志轮转(进程管理工具)
若用PM2管理Node.js应用,可通过pm2-logrotate
插件实现日志轮转。
1. 安装pm2-logrotate插件
pm2 install pm2-logrotate
2. 配置轮转策略
设置轮转参数(如按大小、时间轮转,保留数量):
pm2 set pm2-logrotate:max_size 10M # 单个日志文件最大10MB
pm2 set pm2-logrotate:retain 7 # 保留7个日志文件
pm2 set pm2-logrotate:compress true # 压缩旧日志
pm2 set pm2-logrotate:rotateInterval "0 0 * * *" # 每天0点轮转(cron语法)
3. 重启PM2应用
pm2 restart all
注意事项
- 日志路径一致性:确保logrotate配置中的路径与Node.js应用日志输出路径完全一致(包括文件名模式,如
*.log
)。 - 权限问题:logrotate创建的新日志文件需与Node.js应用有相同的读写权限(如
create 0640 root adm
中的用户/组需与运行Node.js的用户一致)。 - 应用重启:若日志文件被轮转后,Node.js应用仍持有旧文件的句柄,需通过
postrotate
脚本重启应用或发送HUP
信号,确保应用写入新日志文件。 - 测试配置:修改logrotate配置后,务必用
-d
参数测试,避免因配置错误导致日志丢失。 - 备份旧日志:保留的旧日志文件(如
rotate 7
中的7个文件)建议定期备份到远程存储(如S3),防止本地磁盘空间耗尽。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Node.js日志轮转配置指南
本文地址: https://pptw.com/jishu/729897.html