Node.js 应用在 Linux 上“日志报错”通常不是单一原因,而是日志写入方式 + Linux 环境限制共同导致的。下面按最常见原因 → 排查建议给你一个系统性的说明。
报错示例:
EACCES: permission denied, open '/var/log/app.log'
原因:
排查:
ls -ld /var/log
ls -l /var/log/app.log
解决:
mkdir -p /var/log/myapp
chown -R $(whoami):$(whoami) /var/log/myapp
chmod 755 /var/log/myapp
⚠️ 不要用 chmod 777 作为最终方案。
报错示例:
EBUSY: resource busy or locked
原因:
解决:
winstonpinoapp-3000.log
app-3001.log
报错示例:
ENOSPC: no space left on device
排查:
df -h
du -sh /var/log/*
解决:
现象:
原因:
console.log 输出到 stdout建议:
console.log('xxx') // ❌ 不推荐
logger.info('xxx') // ✅
报错表现:
解决:
[Service]
StandardOutput=journal
StandardError=journal
查看日志:
journalctl -u your-service -f
错误示例:
fs.createWriteStream('logs/app.log')
Linux 上:
✅ 建议用绝对路径:
const path = require('path');
const logPath = path.join(__dirname, 'logs/app.log');
df -i
如果 IUse% = 100%,即使磁盘有空间也会报错。
你可以逐项确认:
const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.File({ filename: '/var/log/myapp/app.log' })
]
});
logger.info('服务启动');
如果你愿意,可以把下面信息发我:
我可以直接告诉你是哪一条原因 + 怎么改。