温馨提示×

linux js日志如何轮转

小樊
42
2026-09-26 18:06:35
栏目: 编程语言

在 Linux 下,JS 应用的日志轮转通常有两种思路:
1)应用自己轮转(代码层)
2)系统级轮转(logrotate) ✅(最常用、最推荐)

下面按常见场景说明。


一、使用 logrotate(推荐)

1. 基本前提

  • JS 日志是写入文件的(如 app.log)
  • 不要直接用 console.log 到终端(无法轮转)

示例:

const fs = require('fs');
const logStream = fs.createWriteStream('/var/log/myapp/app.log', { flags: 'a' });

2. 创建 logrotate 配置

sudo vim /etc/logrotate.d/myapp

示例配置:

/var/log/myapp/*.log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
}

关键参数说明

参数 作用
daily 每天轮转
rotate 7 保留 7 份
compress 压缩旧日志
copytruncate 不重启进程,直接截断文件(Node 常用)
missingok 日志不存在也不报错

3. 测试是否生效

sudo logrotate -d /etc/logrotate.d/myapp  # 模拟
sudo logrotate -f /etc/logrotate.d/myapp  # 强制执行

二、Node.js 应用自身轮转(不依赖系统)

方案 1:winston + DailyRotateFile(最常用)

npm install winston winston-daily-rotate-file
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

const logger = winston.createLogger({
  transports: [
    new DailyRotateFile({
      dirname: '/var/log/myapp',
      filename: 'app-%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      maxFiles: '7d',
      zippedArchive: true
    })
  ]
});

✅ 优点:不依赖系统
❌ 缺点:多进程需注意


方案 2:PM2 + logrotate

pm2 install pm2-logrotate

配置:

pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7

三、Docker 场景

Docker log rotate

logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "5"

四、推荐方案总结

场景 推荐方式
服务器部署 ✅ logrotate
Node 单进程 winston
PM2 pm2-logrotate
Docker docker logging

如果你用的是 Node / PM2 / Docker / Nginx 反代,可以告诉我,我可以给你一份精确配置。

0 踩