Debian 上“JS 日志不写”通常不是 Debian 本身的问题,而是运行环境、权限、路径或代码配置导致的。下面按最常见原因给你一个排查清单,基本都能定位到。
请先确认是哪一种:
Node.js 应用日志
fs.writeFile / fs.appendFileconsole.log(重定向到文件)前端 JS 日志
系统 / 服务日志
不同场景原因完全不同。
fs.writeFileSync('./logs/app.log', data)
在 Debian 上:
✅ 正确做法:
const path = require('path');
const logPath = path.join(__dirname, 'logs/app.log');
Debian 默认权限很严格,尤其是:
/var/root检查:
ls -ld logs/
whoami
✅ 修复:
mkdir logs
chown -R youruser:youruser logs
chmod 755 logs
或:
chmod 777 logs # 仅调试用
错误示例:
fs.writeFile('a.log', data);
process.exit(0);
✅ 正确:
fs.writeFileSync('a.log', data);
或等待回调 / promise 完成。
如果你以为 console.log 会自动写文件:
node app.js > app.log 2>&1
否则它只写到 stdout,不会持久化。
如果你用 systemd 启动 Node.js:
[Service]
ExecStart=/usr/bin/node /opt/app/app.js
✅ 查看日志:
journalctl -u your-service -f
如果你期望写文件,要自己写文件,而不是 console.log。
WorkingDirectory=/opt/app
否则 ./logs 根本不存在。
pm2 logs
pm2 logs app
PM2 默认不写你代码里的文件,而是写:
~/.pm2/logs/
如果你代码里没 fs.writeFile,那是正常的。
如果你说的是:
浏览器里的 JS 日志没出现在 Debian 上
那是不可能的。
✅ 正确方式:
fetch() / axios.post() 发日志# 1. 看文件是否存在
ls -l /path/to/log.log
# 2. 看进程用户
ps aux | grep node
# 3. 看 systemd 日志
journalctl -u your-service -n 50
# 4. 手动测试写文件
node -e "require('fs').writeFileSync('/tmp/test.log','ok')"
你可以直接贴出:
cat /etc/os-release)我可以一步一步帮你精确到哪一行导致“不写”。