在 Ubuntu 上“开启 Node.js 日志”一般不是系统层面的开关,而是由你的 Node.js 应用/进程管理方式决定。下面按常见场景给你一套最实用的做法。
node app.js
日志会直接输出到终端(stdout / stderr)。
node app.js > app.log 2>&1
> app.log:标准输出2>&1:错误也写入同一文件✅ 适合临时测试
sudo npm install -g pm2
pm2 start app.js --name my-app
pm2 logs my-app
~/.pm2/logs/
例如:
my-app-out.log
my-app-error.log
pm2 startup
pm2 save
✅ 最常用的 Node.js 日志方案
sudo nano /etc/systemd/system/node-app.service
[Unit]
Description=Node.js App
After=network.target
[Service]
ExecStart=/usr/bin/node /home/ubuntu/app/app.js
WorkingDirectory=/home/ubuntu/app
Restart=always
User=ubuntu
StandardOutput=append:/var/log/node-app/app.log
StandardError=append:/var/log/node-app/error.log
[Install]
WantedBy=multi-user.target
sudo mkdir -p /var/log/node-app
sudo chown ubuntu:ubuntu /var/log/node-app
sudo systemctl daemon-reload
sudo systemctl start node-app
sudo systemctl enable node-app
journalctl -u node-app -f
或
cat /var/log/node-app/app.log
✅ 适合系统级服务
winston(最流行)npm install winston
const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
logger.info('服务启动');
logger.error('出错了');
✅ 多文件、级别控制、按日期分割
morgannpm install morgan
const morgan = require('morgan');
app.use(morgan('combined'));
输出 HTTP 访问日志
console.log?pm2-logrotate| 场景 | 推荐 |
|---|---|
| 生产环境 | PM2 + winston |
| 系统服务 | systemd + 文件日志 |
| 开发 | console.log 或 node app.js |
如果你愿意,可以告诉我:
我可以给你一套完全定制的日志方案。