温馨提示×

ubuntu nodejs日志怎样优化

小樊
39
2026-10-06 11:33:41
栏目: 编程语言

在 Ubuntu 上优化 Node.js 日志,通常从日志内容、日志方式、存储与轮转、性能影响、监控几个方面入手。下面按实用优先级给你一套方案。


一、选择合适的日志库(不要只用 console.log)

推荐:

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

示例(pino,性能优先):

const pino = require('pino');
const logger = pino({ level: 'info' });

logger.info({ user: 'tom' }, 'user login');

✅ 优点:

  • 结构化 JSON
  • 低开销
  • 易接入 ELK / Loki

二、区分日志级别(非常重要)

常见级别:

  • error:必须处理
  • warn:需要注意
  • info:关键业务
  • debug:开发用

生产环境:

logger.level = 'info';

避免:

console.log('debug info'); // 性能差、不可控

三、日志输出方式优化(Ubuntu 环境)

方案 1:输出到 stdout(推荐)

logger.info('message');

然后用 systemd / pm2 管理日志。

方案 2:写文件(需轮转)

不要直接写大文件,要用 logrotate


四、Ubuntu 日志轮转(必须用 logrotate)

创建配置:

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

示例:

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

测试:

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

五、用 systemd 管理 Node.js 日志(推荐)

service 文件

[Unit]
Description=Node App

[Service]
ExecStart=/usr/bin/node /opt/app/index.js
User=node
Restart=always
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

查看日志:

journalctl -u node-app -f

✅ 优点:

  • 自动轮转
  • 不占磁盘
  • 配合 journalctl 很方便

六、PM2 用户推荐方案

pm2 start app.js -i max
pm2 install pm2-logrotate

配置:

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

七、避免常见性能坑

❌ 错误做法:

  • 同步写日志
  • 每个请求打印大量 debug
  • 不限制日志文件大小

✅ 正确做法:

  • 生产关 debug
  • 使用异步日志
  • 错误日志单独文件

八、集中式日志(进阶)

如果多台服务器:

  • ELK(Elasticsearch + Logstash + Kibana)
  • Grafana Loki
  • Fluent Bit

Node 只输出 JSON 到 stdout 即可。


九、推荐生产配置总结

✅ 日志库:pino / winston
✅ 输出:stdout
✅ 管理:systemd 或 pm2
✅ 轮转:logrotate
✅ 级别:生产 info,排障 debug
✅ 存储:不长期本地存


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

  • 用的 Node 版本
  • 是否 PM2 / Docker / systemd
  • 当前日志怎么写的

我可以直接帮你改一份可落地的配置。

0 踩