在 Node.js 里“日志权限”通常分两层来看:1)Node 进程对日志文件的读写权限;2)日志文件本身的 Linux/Unix 文件权限。下面按常见场景说明。
touch app.log
chmod 640 app.log
chown appuser:appgroup app.log
常用权限说明:
600:仅属主读写640:属主读写,组只读664:属主和组读写,其他只读ps aux | grep node
如果 Node 以 appuser 运行,日志文件必须对该用户可读写。
const fs = require('fs');
fs.writeFileSync('/var/log/app.log', 'log content', { mode: 0o640 });
mode: 0o640 控制新建文件的权限const winston = require('winston');
const { format } = winston;
const logger = winston.createLogger({
transports: [
new winston.transports.File({
filename: '/var/log/app.log',
level: 'info'
})
]
});
权限控制:
pm2 start app.js --user appuser
PM2 会以指定用户运行 Node,日志权限随之确定。
PM2 日志目录:
~/.pm2/logs/
RUN mkdir -p /var/log/app && \
chown -R node:node /var/log/app
USER node
避免:
RUN chmod 777 /var/log
原因:
解决:
sudo chown -R appuser /var/log/app
mkdir -p /var/log/app
✅ 日志不要 777
✅ 使用非 root 用户运行 Node
✅ 日志目录单独分区(防磁盘占满)
✅ 敏感信息不要写日志
如果你能说明:
我可以给你更精确的配置示例。