温馨提示×

Debian JS日志如何优化

小樊
50
2026-07-13 03:00:11
栏目: 编程语言

在 Debian 系统上优化 JavaScript(JS)相关日志,核心目标是减少磁盘 I/O、提高可读性、便于排查问题,同时避免日志把磁盘写满。下面按常见场景给你一套实用优化方案。


一、明确 JS 日志来源

先确认你的 JS 日志来自哪里:

场景 常见日志位置
Node.js 应用 stdout / stderr、文件日志
PM2 管理 ~/.pm2/logs/
Nginx 反向代理 /var/log/nginx/
前端 JS 浏览器 console(服务器不可控)
Systemd 服务 journalctl

二、Node.js 应用日志优化(重点)

✅ 1. 不要自己写 fs.appendFile

❌ 错误示例:

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

✅ 正确做法:使用专业日志库

推荐:

  • winston(最常用)
  • pino(性能最好,适合高并发)

✅ 2. Winston 日志优化示例

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json()
  ),
  transports: [
    new winston.transports.File({
      filename: '/var/log/myapp/error.log',
      level: 'error',
      maxsize: 10 * 1024 * 1024, // 10MB
      maxFiles: 5,
    }),
    new winston.transports.File({
      filename: '/var/log/myapp/combined.log',
      maxsize: 20 * 1024 * 1024,
      maxFiles: 7,
    }),
  ],
});

✅ 优点:

  • 自动轮转
  • 控制大小
  • 不阻塞主线程

✅ 3. Pino(高性能,推荐生产)

const pino = require('pino');
const logger = pino({
  level: 'info',
}, pino.destination('/var/log/myapp/app.log'));

配合 pino-rotating-filelogrotate 使用。


三、使用 logrotate(Debian 必备)

✅ 1. 创建 logrotate 配置

sudo nano /etc/logrotate.d/myapp

示例:

/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data www-data
    postrotate
        systemctl reload myapp || true
    endscript
}

✅ 效果:

  • 每天轮转
  • 保留 7 天
  • 自动压缩
  • 防止日志无限增长

四、Systemd + Node.js 的日志优化

✅ 1. 限制 journal 日志大小

sudo nano /etc/systemd/journald.conf
SystemMaxUse=200M
RuntimeMaxUse=100M

然后:

sudo systemctl restart systemd-journald

✅ 2. Node 服务不要输出过多日志

journalctl -u myapp.service -f

建议:

  • info 级别只保留关键路径
  • 调试日志只在排查时开启

五、PM2 日志优化(如使用 PM2)

✅ 1. 限制日志大小

pm2 install pm2-logrotate

配置:

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

✅ 防止 ~/.pm2/logs 爆满


六、Nginx JS 相关日志优化

如果是接口日志:

access_log /var/log/nginx/access.log combined buffer=32k flush=5m;
error_log /var/log/nginx/error.log warn;

✅ 减少磁盘写频率
✅ 只记录 warn 及以上错误


七、日志级别优化(非常重要)

环境 推荐级别
生产 warn / error
预发 info
本地 debug
logger.level = process.env.NODE_ENV === 'production' ? 'warn' : 'info';

八、避免的常见坑

console.log 大量输出
❌ 日志中打印整个 req / res
❌ 同步写日志
❌ 日志目录权限错误
❌ 忘记 logrotate


九、推荐组合(生产最佳实践)

Node.js + Pino + logrotate
PM2 + pm2-logrotate
Systemd journal 限制大小


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

  • 你用的是 Node / PM2 / Docker / Nginx
  • 日志路径
  • 当前磁盘被写满还是性能慢

我可以直接帮你给出针对你环境的完整配置

0