在 Node.js 中“实时查看日志”通常有几种常见做法,取决于你日志是怎么打的、运行环境是什么。下面按常用场景给你一个完整指南。
如果你用的是:
console.log('xxx')
console.error('xxx')
node app.js
✅ 实时输出,直接看终端即可。
winston(最常用)npm install winston
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'app.log' })
]
});
logger.info('服务启动');
logger.error('出错了');
tail -f app.log
✅ 这是生产环境最常用方式
docker logs -f 容器ID
docker logs -f --tail=100 容器ID
✅ 推荐:Node 日志打到 stdout,不要只写文件
pm2 start app.js
pm2 logs
只看某个服务:
pm2 logs app
只看错误日志:
pm2 logs --err
✅ PM2 会自动保存日志,支持自动切割
kubectl logs -f pod名
kubectl logs -f pod名 -c 容器名
tail -f app.log | grep ERROR
tail -f app.log | grep --color ERROR
✅ 生产环境不要只用 console.log
✅ 日志输出到 stdout + 文件
✅ 使用 winston / pino
✅ 日志格式用 JSON(方便 ELK / Loki)
| 场景 | 命令 |
|---|---|
| 本地开发 | node app.js |
| 日志文件 | tail -f app.log |
| Docker | docker logs -f 容器 |
| PM2 | pm2 logs |
| K8s | kubectl logs -f pod |
如果你愿意,可以告诉我:
我可以给你一个完全贴合你项目的实时日志方案。