温馨提示×

js日志linux下如何切割

小樊
42
2026-10-14 09:16:05
栏目: 编程语言

在 Linux 下对 JS(Node.js)日志进行切割,常见做法有以下几种,按推荐程度给你说明:


一、最推荐:用 logrotate(系统级,自动切割)

适合:所有 Node.js 服务日志(console、文件日志)

示例(假设日志在 /var/log/myapp/)

创建配置文件:

sudo vim /etc/logrotate.d/myapp

内容示例:

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

说明:

  • daily:每天切割
  • rotate 14:保留 14 天
  • compress:压缩旧日志
  • copytruncate:不重启 Node.js 也能切割(非常重要)

✅ copytruncate 是 Node.js 日志切割的关键


二、Node.js 代码中直接切割(推荐写文件日志时)

使用 winston + winston-daily-rotate-file

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({
      filename: '/var/log/myapp/app-%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      maxFiles: '14d',
      zippedArchive: true
    })
  ]
});

logger.info('hello');

✅ 自动按天切割
✅ 自动压缩
✅ 不依赖系统


三、PM2 用户(最简单)

如果你用 PM2:

pm2 install pm2-logrotate

配置:

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

✅ 自动切割
✅ 自动清理
✅ 零代码改动


四、不推荐但可用:自己写脚本

mv app.log app.log.$(date +%Y%m%d)
kill -USR1 <node_pid>

❌ 容易丢日志
❌ 维护麻烦


总结建议

场景 推荐方案
生产服务 logrotate + copytruncate
新项目 winston-daily-rotate-file
PM2 项目 pm2-logrotate

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

  • 你用的是 pm2 / docker / 裸 node
  • 日志是 console 还是写文件

我可以直接给你一份可复制的配置。

0 踩