在 Ubuntu 上开启 Node.js 日志,常见有 应用层日志 和 系统层日志 两种。下面按“从简单到规范”的方式给你说明。
console.log / console.error最简单,但不推荐用于生产。
console.log('应用启动');
console.error('发生错误');
日志会输出到 标准输出 / 标准错误,取决于你如何运行。
winston(最常用)pino(性能最好)bunyannpm install winston
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
logger.info('服务启动');
logger.error('数据库错误');
日志文件会生成在:
your-project/error.log
your-project/combined.log
node app.js
日志直接输出到终端。
nohup node app.js > app.log 2>&1 &
查看日志:
tail -f app.log
sudo nano /etc/systemd/system/nodeapp.service
[Unit]
Description=Node.js App
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/app
ExecStart=/usr/bin/node /home/ubuntu/app/app.js
Restart=always
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start nodeapp
sudo systemctl enable nodeapp
journalctl -u nodeapp -f
或查看历史:
journalctl -u nodeapp --since "10 min ago"
npm install -g pm2
pm2 start app.js
查看日志:
pm2 logs
pm2 logs app
日志路径:
~/.pm2/logs/
| 级别 | 用途 |
|---|---|
| info | 正常信息 |
| warn | 警告 |
| error | 错误 |
| debug | 调试 |
| 场景 | 推荐方式 |
|---|---|
| 本地开发 | console / pino |
| 生产环境 | winston + systemd |
| 简单部署 | PM2 |
| 系统级 | journalctl |
如果你愿意,可以告诉我:
我可以给你一套完全适配你项目的日志方案。