在 Debian 系统上“查 Golang 日志权限”,通常可以分为 3 类问题,下面按常见场景给你说明怎么做。
如果 Golang 程序把日志写到了文件,比如 /var/log/myapp.log:
ls -l /var/log/myapp.log
示例输出:
-rw-r--r-- 1 root root 1234 Jun 25 10:00 myapp.log
含义:
rw-:所有者可读写r--:组用户只读r--:其他用户只读root root:属主和属组如果你怀疑是权限问题,可进一步检查:
namei -l /var/log/myapp.log
这条命令会一层层显示目录权限。
ps -ef | grep your_go_app
或
ps aux | grep your_go_app
例如:
www-data 12345 ... /opt/myapp/server
说明程序是以 www-data 用户运行的。
systemctl cat myapp.service
看是否有:
User=www-data
tail -n 100 /var/log/myapp.log
常见 Golang 权限错误:
open /var/log/myapp.log: permission denied
journalctl -u myapp.service -n 100
原因:日志目录属主不是运行用户
解决:
sudo chown www-data:www-data /var/log/myapp.log
sudo chmod 644 /var/log/myapp.log
或改日志目录:
sudo chown -R www-data:www-data /var/log/myapp
检查:
chrootmount | grep " /var/log"
sudo aa-status
如果程序被限制:
sudo journalctl | grep apparmor
# 1. 日志文件权限
ls -l /var/log/myapp.log
# 2. 程序运行用户
ps aux | grep myapp
# 3. 日志报错
tail -n 50 /var/log/myapp.log
# 4. systemd 日志
journalctl -u myapp.service -n 50
如果你愿意,可以把 Golang 日志路径 / 运行方式(直接跑还是 systemd)/ 报错信息 发出来,我可以帮你精准判断是哪一层权限问题。