在 Ubuntu 上优化 Node.js 日志,通常从日志内容、日志方式、存储与轮转、性能影响、监控几个方面入手。下面按实用优先级给你一套方案。
推荐:
示例(pino,性能优先):
const pino = require('pino');
const logger = pino({ level: 'info' });
logger.info({ user: 'tom' }, 'user login');
✅ 优点:
常见级别:
error:必须处理warn:需要注意info:关键业务debug:开发用生产环境:
logger.level = 'info';
避免:
console.log('debug info'); // 性能差、不可控
logger.info('message');
然后用 systemd / pm2 管理日志。
不要直接写大文件,要用 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
[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 start app.js -i max
pm2 install pm2-logrotate
配置:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
❌ 错误做法:
✅ 正确做法:
如果多台服务器:
Node 只输出 JSON 到 stdout 即可。
✅ 日志库:pino / winston
✅ 输出:stdout
✅ 管理:systemd 或 pm2
✅ 轮转:logrotate
✅ 级别:生产 info,排障 debug
✅ 存储:不长期本地存
如果你愿意,可以告诉我:
我可以直接帮你改一份可落地的配置。