温馨提示×

linux中js日志如何分割

小樊
47
2026-09-20 20:21:26
栏目: 编程语言

在 Linux 下对 JS 应用(Node.js)产生的日志进行分割,常见做法有下面几种,按“是否改代码”和“是否用工具”来分:


一、不修改 JS 代码(推荐,最常用)

1. 使用 logrotate(系统级日志分割)

适合:所有 JS 程序(如 Node、前端构建日志、PM2 日志)

示例:分割 Node 日志

/var/log/node/app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

说明:

  • daily:每天分割
  • rotate 7:保留 7 份
  • compress:压缩旧日志
  • copytruncate:不重启进程直接截断日志(JS 程序常用)

⚠️ JS 程序如果一直写同一个文件,copytruncate 很关键


2. 使用 PM2 自带日志分割(Node.js 最常用)

如果你用 PM2 启动 Node:

pm2 install pm2-logrotate

常用配置:

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

✅ 优点:

  • 不用改代码
  • 自动按大小/时间分割
  • 支持压缩

二、在 JS 代码里做日志分割(可控性最强)

3. 使用 winston + winston-daily-rotate-file

Node.js 最主流方案

npm install winston winston-daily-rotate-file

示例:

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

const transport = new DailyRotateFile({
  filename: 'logs/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxFiles: '14d',
  zippedArchive: true
});

const logger = winston.createLogger({
  transports: [transport]
});

✅ 特点:

  • 按天自动生成日志
  • 自动压缩
  • 可控制保留时间

4. 使用 pino + pino-roll

适合高性能 Node 服务

npm install pino pino-roll
const pino = require('pino');
const logger = pino({
  transport: {
    type: 'rotating-file',
    options: {
      file: 'logs/app.log',
      frequency: 'daily',
      size: '10m',
      limit: '7d'
    }
  }
});

三、前端 JS / 浏览器日志(特殊场景)

浏览器日志一般:

  • 前端不写文件
  • 通过接口上报(如 Sentry、ELK)
  • 服务端再按上面方式分割

四、方案选择建议

场景 推荐方案
Node + PM2 PM2 logrotate
Node 原生 winston / pino
已有日志文件 logrotate
容器 / K8s stdout + 日志收集

如果你愿意,可以告诉我:

  • 是 Node.js 还是前端
  • 用没用 PM2 / Docker
  • 日志是 按大小还是按时间

我可以直接给你一套可用配置。

0 踩