在 Linux 上 Node.js 日志重启后消失,通常不是 Node 自身的问题,而是日志写在哪里、由谁管理、是否持久化的问题。下面按最常见原因逐一说明。
很多 Node 程序这样写:
console.log('xxx')
这些日志:
| 启动方式 | 重启后日志 |
|---|---|
直接 node app.js |
终端关闭即消失 |
nohup node app.js & |
在 nohup.out(重启可能清空) |
| systemd | 在 journalctl |
| docker | 在容器日志 |
✅ 结论:
console.log 不是“日志系统”,只是输出。
例如:
/tmp重启后:
错误示例:
fs.writeFile('app.log', data)
每次重启都会清空文件
✅ 应使用:
fs.appendFile('app.log', data)
如果是 systemd 启动:
journalctl -u yourapp
默认:
const fs = require('fs');
fs.appendFileSync('/var/log/myapp/app.log', msg);
并确保:
npm i winston
const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.File({ filename: '/var/log/myapp/app.log' })
]
});
logger.info('server started');
✅ 支持:
[Service]
ExecStart=/usr/bin/node /opt/app/app.js
StandardOutput=append:/var/log/myapp/out.log
StandardError=append:/var/log/myapp/err.log
不要写容器里:
请确认:
/var/log 或持久盘writeFile(错误)你可以贴一下:
node / pm2 / systemd / docker)我可以直接告诉你为什么消失 + 改哪几行。