Node.js 日志“丢失”通常不是真的被删除了,而是输出方式、进程生命周期、环境配置等导致你“看不到”或“没写进去”。下面按常见原因系统说明,并给出排查与解决建议。
Node.js 是异步的,如果进程在 console.log / 写文件完成前就退出了:
console.log('start');
process.exit(0); // 可能来不及 flush
✅ 解决:
process.exit() 强制退出在以下情况:
| 管道console.log 可能被块缓冲,而不是行缓冲。
✅ 表现:
✅ 解决:
node app.js | cat
# 或
stdbuf -oL -eL node app.js
Docker 推荐:直接输出到 stdout/stderr,不要自己写文件
常见错误:
fs.writeFile('./logs/app.log', data)
✅ 解决:
const path = require('path');
fs.writeFile(path.resolve(__dirname, 'logs/app.log'), data)
PM2 默认:
~/.pm2/logs/xxx-out.logxxx-error.log✅ 查看:
pm2 logs
pm2 logs app-name
✅ 常见坑:
console.log 但看文件nodemon 跑,PM2 没接管如:
配置错误导致:
✅ 示例(winston):
level: 'error' // info 日志全没了
Promise.reject('oops') // 没 catch
或:
throw new Error('x') // 没 try/catch
进程直接退出,后续日志全没。
✅ 解决:
process.on('uncaughtException', ...)
process.on('unhandledRejection', ...)
✅ 建议:
fs.writeFile(...) // 每次覆盖
✅ 改成:
fs.appendFile(...)
process.exit()你可以贴:
我可以精准定位是哪一类日志丢失。