在 Linux 上用 Node.js 写日志时,“日志权限怎么设”通常包含两层含义:
下面分别说明,并给出常见做法。
Node.js 本身不需要特殊权限,只要:
w(写)权限w / a 权限例如:
# 查看运行用户
whoami
# 日志目录示例
/var/log/myapp/
推荐做法:
sudo mkdir -p /var/log/myapp
sudo chown -R myuser:myuser /var/log/myapp
| 场景 | 推荐权限 |
|---|---|
| 单用户应用 | 644 |
| 多服务共享 | 664 |
| 含敏感信息 | 600 |
chmod 644 app.log
chmod 600 app.log # 更安全
Node.js 默认受 umask 影响,不一定是你想要的权限。
fs.open 指定 modeconst fs = require('fs');
fs.open('app.log', 'a', 0o644, (err, fd) => {
if (err) throw err;
});
fs.writeFilefs.writeFile('app.log', 'hello', { mode: 0o644 }, () => {});
const winston = require('winston');
const { File } = require('winston').transports;
new File({
filename: '/var/log/myapp/app.log'
});
权限靠目录 + 运行用户控制即可。
/etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0644 myuser myuser
sharedscripts
postrotate
pkill -HUP node
endscript
}
✅ create 0644 user group 非常关键
原因:
解决:
sudo chown -R user:user /var/log/myapp
chmod 600 app.log
✅ 最佳实践总结:
/var/log/yourapp644 或 600logrotatechmod,用 create 控制如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置。