在 Linux 上导出 Node.js 日志,常见做法取决于日志是怎么产生的(控制台输出、文件、PM2、Docker 等)。下面按场景给你总结几种常用方式。
node app.js > app.log 2>&1
>:标准输出2>&1:错误输出也写入>>node app.js >> app.log 2>&1
nohup node app.js >> app.log 2>&1 &
pm2 logs
pm2 logs --out logs/out.log --error logs/err.log
~/.pm2/logs/
cat ~/.pm2/logs/app-out.log ~/.pm2/logs/app-error.log > all.log
const fs = require('fs');
function log(msg) {
fs.appendFileSync('app.log', `${new Date()} ${msg}\n`);
}
npm install winston
const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.File({ filename: 'app.log' })
]
});
logger.info('hello');
docker logs <container_id>
docker logs <container_id> > app.log 2>&1
如果 Node.js 是 systemd 服务:
journalctl -u node-app.service > app.log
实时导出:
journalctl -u node-app.service -f
grep "2026-01-21" app.log > today.log
tail -f app.log
| 场景 | 推荐方式 |
|---|---|
| 本地调试 | node app.js >> app.log |
| 生产环境 | PM2 + 日志文件 |
| 容器 | Docker logs |
| 系统服务 | journalctl |
| 结构化日志 | Winston / Pino |
如果你能告诉我:
我可以直接给你一条最合适的命令。