温馨提示×

为什么js日志写满debian

小樊
35
2026-10-10 02:29:52
栏目: 编程语言

“JS 日志写满 Debian”通常是指 Node.js(或前端构建/服务端 JS 程序)产生的日志文件不断增大,最终占满 Debian 服务器的磁盘空间。这不是 Debian 本身的问题,而是日志管理不当或程序行为异常导致的。

下面从 常见原因 → 排查方法 → 解决/预防方案 来说明。


一、常见原因

1. Node.js 应用直接写日志到文件

例如:

fs.appendFileSync('app.log', log)

如果:

  • 没有日志轮转
  • 请求量巨大
  • 出错时疯狂打印错误

→ 日志会无限增长


2. 使用 console.log / console.error 但被重定向

例如:

node app.js > app.log 2>&1

Debian 不会自动切割 app.log


3. PM2 日志未配置轮转

PM2 默认日志在:

~/.pm2/logs/

如果不装 pm2-logrotate,日志会一直增长


4. 死循环 / 异常反复打印

例如:

setInterval(() => {
  console.log('error', err)
}, 0)

或异常被 catch 后继续抛


5. Docker + JS 日志

docker logs container > file

或 stdout 没限制


二、如何快速排查(Debian)

1. 看磁盘占用

df -h

2. 找大文件

du -h /var /home /root 2>/dev/null | sort -rh | head

3. 找大日志

find / -name "*.log" -size +100M

4. 看是谁在写

lsof | grep deleted

(常见于“删了但进程还在写”的日志)


三、解决方案

✅ 方案 1:使用 logrotate(推荐)

示例 /etc/logrotate.d/node-app:

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

✅ 方案 2:PM2 用户必装

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

✅ 方案 3:用专业日志库

不要直接 console.log

推荐:

  • winston
  • pino
  • bunyan

示例(pino):

import pino from 'pino'
const logger = pino({ level: 'info' })
logger.info('hello')

✅ 方案 4:Docker 场景

限制日志大小:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

✅ 方案 5:紧急清理

# 不要 rm,先清空
: > app.log

四、一句话总结

JS 日志写满 Debian,本质是没有日志轮转 + 程序日志失控。

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

  • 你是 Node.js / 前端 / Docker / PM2
  • 日志路径或报错信息

我可以给你 针对性的配置示例。

0 踩