在 Debian 上部署 Node.js 应用时,“日志不写”通常不是 Node 本身的问题,而是运行方式、权限、路径或日志库配置导致的。下面按最常见原因逐一排查。
日志路径写的是相对路径,例如:
fs.writeFileSync('./logs/app.log', 'xxx')
但用 systemd 或 pm2 启动时,工作目录可能不是项目目录。
✅ 解决:
const path = require('path');
const logFile = path.join(__dirname, 'logs', 'app.log');
如果你用 systemd:
[Service]
ExecStart=/usr/bin/node /opt/app/index.js
默认工作目录是 /
✅ 解决:
WorkingDirectory=/opt/app
然后:
systemctl daemon-reload
systemctl restart yourapp
日志目录不存在 or 权限不足:
ls -ld logs
whoami
✅ 解决:
mkdir -p /opt/app/logs
chown -R youruser:youruser /opt/app/logs
很多 Node 程序只 console.log(),没写文件。
在 Debian + systemd 下:
journalctl -u yourapp.service
✅ 如果你只想看“日志不写文件”,这是正常的
PM2 默认日志不在你项目里:
~/.pm2/logs/
查看:
pm2 logs
pm2 show yourapp
例如 winston / pino:
✅ 解决:
process.on('exit', () => logger.end());
df -h
df -i
日志写进容器,但容器被销毁。
✅ 解决:
# 1. 进程是否还在
ps aux | grep node
# 2. systemd 日志
journalctl -u yourapp -f
# 3. 文件是否生成
find / -name "*.log" 2>/dev/null
# 4. 权限
namei -l /opt/app/logs/app.log
✅ 不要自己写文件日志
✅ 用 systemd + journald
console.log('[info] xxx');
journalctl -u yourapp.service -f
如果你愿意,可以贴:
我可以精确告诉你“为什么没写”。