Node.js 日志丢失一般很难“直接找回”,因为 Node.js 本身不会自动保存历史日志。能否找回,取决于日志是怎么记录的、有没有落盘、有没有被覆盖或轮转。下面按常见场景给你排查和补救思路。
例如:
console.log('xxx')
常见丢失原因
✅ 能否找回
lsof -p <pid> 查看 stdout 指向cat /proc/<pid>/fd/1例如:
fs.appendFileSync('app.log', data)
常见丢失原因
✅ 找回方法
lsof | grep deleted
找到类似:
node 12345 user 3w REG ... app.log (deleted)
恢复:
cp /proc/12345/fd/3 /tmp/app.log
⚠️ 进程重启后无法恢复
检查:
ls -lh logs/
可能变成:
app.log.1
app.log.2.gz
✅ 直接解压 / 查看旧日志即可
PM2 默认会保存日志
查看日志路径:
pm2 logs
pm2 list
查看具体文件:
~/.pm2/logs/
✅ 常见找回方式:
pm2 flush # ❌ 会清空,慎用
pm2 logs app --lines 1000
如果没改配置,90% 的情况日志还在
Docker 默认日志在:
/var/lib/docker/containers/
查看:
docker logs <container_id>
如果容器被删除:
docker inspect <container>
例如:
fs.writeFile('app.log', data) // 每次覆盖
✅ 无法找回历史内容
✅ 只能避免未来再发生(改为 appendFile 或日志库)
✅ 先问自己:
winston / log4js / pino?console.log?✅ 永远不要只用 console.log ✅ 使用专业日志库:
import winston from 'winston'
const logger = winston.createLogger({
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
})
✅ PM2 日志配置:
pm2 start app.js --log /var/log/app.log
✅ Docker 挂载日志目录:
-v /host/logs:/app/logs
你可以直接贴出:
我可以精确告诉你还能不能找回,以及具体命令。