Debian 上“JS 日志丢失”通常不是 JS 语言本身的问题,而是运行环境、日志配置、系统日志机制或权限导致的。下面按常见原因给你梳理一下,你可以对照排查。
console.log,但没看到输出JS 里 console.log 默认输出到 stdout / stderr:
Node.js 直接运行
node app.js
日志在终端
后台运行(nohup / &)
node app.js > out.log 2>&1 &
如果没重定向,日志就“丢”了
✅ 解决:
node app.js >> /var/log/myapp.log 2>&1
如果你用 systemd 启动 Node 服务:
[Service]
ExecStart=/usr/bin/node /opt/app/app.js
日志不在文件里,而在 journald
查看:
journalctl -u yourapp.service
✅ 日志“丢失”其实是进了 journal
查看实时:
journalctl -u yourapp -f
Debian 默认有 logrotate:
检查:
cat /etc/logrotate.d/*
现象:
.gzJS 进程用户(如 www-data、node)没有写日志权限
比如:
fs.appendFileSync('/var/log/app.log', 'log')
但目录权限是:
drwxr-x--- root root /var/log
✅ 解决:
sudo chown -R node:node /var/log/myapp
Node 未捕获异常直接退出:
process.on('uncaughtException', e => {
console.error(e)
})
否则:
如果你在 Docker 里跑:
✅ 正确方式:
npm i winston
const winston = require('winston')
winston.add(new winston.transports.File({ filename: '/var/log/app.log' }))
StandardOutput=journal
StandardError=journal
我可以给你一套完整配置。