Node.js 日志“丢失”能否恢复,取决于日志写到了哪里、怎么丢的、存储介质状态。下面按常见场景给你一个排查与恢复思路。
常见位置:
console.logfs.writeFile / fs.appendFile)现象:服务崩了,最后几秒日志没了
✅ 恢复 / 预防:
process.on('exit', ...)
process.on('uncaughtException', ...)
process.on('SIGTERM', ...)
pino 等支持 flush 的库❌ 已丢失:通常无法恢复
现象:rm app.log 后,文件消失但服务正常
✅ 有可能恢复!
ls -l /proc/<pid>/fd | grep deleted
如果看到 deleted 文件:
cp /proc/<pid>/fd/<fd> app.log.bak
⚠️ 仅适用于:
现象:老日志没了
✅ 检查:
logrotatepm2 logs --lines 1000docker logs --tail 1000 <container>
❌ 若被清理:通常不可恢复
docker inspect --format='{{.LogPath}}' <container>
日志文件一般在:
/var/lib/docker/containers/.../json.log
✅ 若容器未删:
docker logs❌ 容器已删:无法恢复
检查:
df -h
ls -l your/log/path
✅ 修复权限或清理磁盘后重启
✅ 使用专业日志库(推荐):
pino(快、可靠)winston✅ 多写一份:
✅ 集中化:
如果你愿意,可以告诉我:
我可以给你针对性的恢复或改造方案。