温馨提示×

如何清理Linux Nodejs日志

小樊
45
2026-08-29 00:44:22
栏目: 编程语言

在 Linux 上清理 Node.js 日志,常见做法取决于日志的生成方式。下面按常见场景给你一套完整、可操作的方案。


一、确认日志在哪(很关键)

1️⃣ Node.js 自己写日志

常见目录:

/var/log/
~/logs/
./logs/

查找大文件:

find / -name "*.log" -size +100M 2>/dev/null

二、直接清理日志文件(不推荐直接删除)

✅ 正确方式(清空内容,不删文件)

: > /path/to/app.log
# 或
truncate -s 0 /path/to/app.log

⚠️ 不要直接 rm 日志文件
如果程序还在运行,删了文件空间不会释放。


三、使用 logrotate(强烈推荐 ✅)

1️⃣ 安装

sudo apt install logrotate   # Debian/Ubuntu
sudo yum install logrotate   # CentOS

2️⃣ 配置示例

编辑或新建:

sudo vim /etc/logrotate.d/node-app

内容示例:

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

✅ 含义:

  • daily:每天轮转
  • rotate 7:保留 7 个
  • compress:压缩旧日志
  • copytruncate:不重启 Node.js 也能生效

3️⃣ 测试

sudo logrotate -d /etc/logrotate.d/node-app

四、如果是 PM2 启动的 Node.js

1️⃣ 查看日志

pm2 logs

2️⃣ 清理日志

pm2 flush

3️⃣ 限制日志大小(推荐)

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

五、Docker 中的 Node.js 日志

1️⃣ 查看容器日志

docker logs <container_id>

2️⃣ 清理 Docker 日志

truncate -s 0 /var/lib/docker/containers/*/*-json.log

3️⃣ 防止日志爆满(推荐)

docker-compose.yml

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

六、Node.js 代码层优化(从源头减少)

✅ 使用日志库

  • winston
  • pino

示例(winston):

const { createLogger, transports } = require('winston');

const logger = createLogger({
  transports: [
    new transports.File({ filename: 'app.log', maxsize: 10485760, maxFiles: 5 })
  ]
});

七、快速自检清单 ✅

df -h                 # 磁盘是否满了
du -sh /var/log/*     # 哪个日志大
lsof | grep deleted   # 是否有已删除但未释放

八、建议的最佳实践 ✅

✅ 不要手动删日志
✅ 使用 logrotatepm2-logrotate
✅ 日志按天切割
✅ 限制单个日志大小
✅ 不要用 console.log 打生产日志


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

  • ✅ 是否使用 PM2 / Docker / 原生 Node
  • ✅ 日志路径
  • ✅ Linux 发行版

我可以帮你直接写一份可用的 logrotate 或清理脚本

0