在 Ubuntu 上导出 Node.js 日志,常见做法取决于你日志是如何产生的(console、文件、PM2、Docker、systemd 等)。下面按常见场景给你一套完整方案。
node app.js > app.log 2>&1
> app.log:标准输出2>&1:错误也写入同一文件✅ 适合临时调试
nohup node app.js > app.log 2>&1 &
查看日志:
tail -f app.log
pm2 logs
pm2 logs app-name
PM2 日志默认在:
~/.pm2/logs/
导出:
cp ~/.pm2/logs/app-name-out.log /tmp/app.log
pm2 logs app-name --lines 1000 > export.log
ecosystem.config.js:
module.exports = {
apps: [{
name: 'app',
script: 'app.js',
out_file: '/var/log/node/app-out.log',
error_file: '/var/log/node/app-err.log',
merge_logs: true,
log_date_format: 'YYYY-MM-DD HH:mm:ss'
}]
}
const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.File({ filename: 'logs/app.log' })
]
});
logger.info('hello');
导出:
cp logs/app.log /backup/
journalctl -u node-app.service
journalctl -u node-app.service > node-app.log
journalctl -u node-app.service -f
docker logs container_id
docker logs container_id > app.log 2>&1
journalctl -u node-app.service --since "1 hour ago" > app.log
journalctl -u node-app.service --since "2025-01-20" --until "2025-01-21"
✅ 生产环境推荐组合
logrotate 防止日志爆炸/var/log/node/*.log {
daily
rotate 7
compress
missingok
notifempty
}
我可以给你精确到命令级别的方案。