Node.js 日志权限问题一般出现在写日志文件时没有权限,或者日志目录/文件被其他用户或容器创建后权限不对。常见场景和解决办法如下:
# 看日志目录权限
ls -ld logs
ls -l logs/app.log
# 看当前运行用户
whoami
ps aux | grep node
mkdir -p logs
chown -R youruser:yourgroup logs
chmod -R 755 logs
PM2
pm2 start app.js --user www-data
Docker
USER node
或
chown -R node:node /app/logs
不要写:
/logs/app.log
改成:
./logs/app.log
或
process.env.HOME + '/logs/app.log'
如 winston / pino:
const winston = require('winston');
winston.add(new winston.transports.File({
filename: 'logs/app.log'
}));
并确保:
[Service]
User=www-data
WorkingDirectory=/var/www/app
# 容器里日志没权限
docker exec -it container sh
whoami
ls -l /app/logs
解决:
RUN mkdir -p /app/logs && chown -R node:node /app/logs
const fs = require('fs');
const path = require('path');
const logDir = path.join(__dirname, 'logs');
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir, { recursive: true });
}
如果你能贴一下:
我可以直接帮你定位到具体那一行的权限问题。