温馨提示×

Debian Nodejs日志太多咋办

小樊
53
2026-08-23 20:45:38
栏目: 编程语言

在 Debian 上 Node.js 日志太多,一般可以从 日志来源、日志级别、存储方式、轮转策略 四个方面来解决。下面按常见场景给你一套实用方案。


一、先搞清楚日志是从哪来的

1️⃣ Node.js 应用自身日志

  • console.log / console.error
  • 日志库(winston、pino、bunyan 等)
  • 未捕获异常

2️⃣ 系统 / 进程管理日志

  • systemd(journalctl)
  • pm2
  • docker

3️⃣ Nginx / 反向代理日志

  • /var/log/nginx/

二、立即缓解:清理 + 限制大小

✅ 1. 查看哪些日志最大

du -sh /var/log/*
journalctl --disk-usage

✅ 2. 清空 systemd 日志(慎用)

journalctl --vacuum-size=100M

或按时间:

journalctl --vacuum-time=7d

三、Node.js 层面:减少日志量(最关键)

✅ 1. 控制日志级别

生产环境不要 debug / info 全开

const logLevel = process.env.NODE_ENV === 'production'
  ? 'warn'
  : 'debug';

✅ 2. 用专业日志库(强烈推荐)

Winston 示例

const winston = require('winston');

const logger = winston.createLogger({
  level: 'warn', // 只记录 warn 以上
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

✅ 避免 console.log 满天飞


四、日志轮转(防止无限增长)

✅ 方法 1:使用 winston-daily-rotate-file

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

new DailyRotateFile({
  dirname: '/var/log/myapp',
  filename: 'app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxSize: '20m',
  maxFiles: '14d'
})

✅ 自动删除 14 天前的日志


✅ 方法 2:系统级 logrotate(适合所有日志)

sudo nano /etc/logrotate.d/nodeapp
/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

测试:

logrotate -d /etc/logrotate.d/nodeapp

五、systemd / PM2 场景

✅ PM2(最常见)

pm2 logs        # 查看
pm2 flush       # 清空

限制日志大小:

pm2 start app.js --max-memory-restart 500M --log /var/log/myapp/pm2.log

或:

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

✅ systemd 服务

StandardOutput=append:/var/log/myapp/out.log
StandardError=append:/var/log/myapp/err.log

配合 logrotate 使用。


六、如果日志是异常导致的(重点)

✅ 捕获未处理异常

process.on('uncaughtException', err => {
  logger.error(err);
});

process.on('unhandledRejection', err => {
  logger.error(err);
});

否则 Node.js 会疯狂打错误日志。


七、推荐的生产环境组合 ✅

Node.js + Winston + 日志轮转 + 只记录 warn/error

- 不用 console.log
- 不记录 debug
- 日志按天切割
- 自动删除旧日志

八、如果你愿意,我可以帮你:

  • ✅ 看你现在的日志配置
  • ✅ 给你一份 PM2 / systemd 完整配置
  • ✅ 针对 Docker / Nginx / K8s 场景优化

你可以直接贴:

  • 你是怎么跑 Node.js 的(PM2 / systemd / docker)
  • 日志现在存在哪个目录

0