发布于2026-07-12 阅读(0)
扫一扫,手机访问
说到 Node.js 的日志管理,“轮转”是个绕不开的话题——生产环境跑久了,日志文件越堆越大,不光占磁盘,查问题也费劲。在 Ubuntu 上,处理这事儿其实比想象中简单,这里分享两种主流的做法,一个走系统工具路线,另一个靠 Node.js 自带的库搞定。

logrotate 工具logrotate 是 Linux 自带的日志管家,专门负责轮转、压缩、清理这些脏活累活,不需要在应用层面改代码。
安装 logrotate(如果系统里没有的话):
sudo apt-get update
sudo apt-get install logrotate为你的 Node.js 应用创建一个配置文件,放在 /etc/logrotate.d/ 下面。比如叫 myapp:
sudo nano /etc/logrotate.d/myapp
写入以下配置:
/path/to/your/nodejs/app/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 root adm
}
daily:每天轮转一次。rotate 7:保留最近 7 个轮转后的日志文件。compress:把旧的日志文件压缩成 gz 格式。delaycompress:这次不急着压缩,等下次轮转时再压缩。missingok:日志文件如果不在了,不报错,跳过就是。notifempty:空的日志文件不轮转,省事儿。create 640 root adm:轮转后新建日志文件,权限设为 640,属主 root,属组 adm。手动测试一下配置是否有效:
sudo logrotate -f /etc/logrotate.d/myapp如果项目里已经用了 winston、pino 这类日志库,那就不用额外折腾系统工具了——这些库通常内置了轮转支持,配置起来更灵活。
winston 举个例子:安装 winston 和 winston-daily-rotate-file:
npm install winston winston-daily-rotate-file在代码里配置一个按天轮转的 transport:
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: 'application-%DATE%.log',
datePattern: 'YYYY-MM-DD-HH',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
});
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [transport]
});
logger.info('Hello, world!');
这段配置会按小时生成日志文件(datePattern 里用到了 HH),自动压缩旧文件,单个文件超过 20MB 也会触发轮转,保留最近 14 天的日志。
两种方法各有侧重:logrotate 是最通用、最省事的方案,只要指定日志路径就能跑,跟具体用什么语言、什么框架无关;而 winston-daily-rotate-file 这类库则让轮转逻辑跟应用代码紧密结合,方便按需定制文件名、大小、保留天数等细节。根据实际场景选一个就行,没必要两套都上。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8