“Golang 在 Linux 下日志报错”这个现象本身比较宽泛,我先从常见原因 + 典型报错示例 + 排查方法几个角度给你梳理一下,你可以对照看看属于哪一类。
报错示例
open /var/log/app.log: permission denied
原因
解决
# 查看权限
ls -ld /var/log
# 修改目录权限或属主
sudo chown -R appuser:appuser /var/log
报错示例
open /data/logs/app.log: no such file or directory
原因
解决
os.MkdirAll("/data/logs", 0755)
报错示例
write /var/log/app.log: no space left on device
排查
df -h
解决
现象
bad file descriptor原因
rm 了日志文件,但程序没重启解决
# 查看被删除但仍打开的文件
lsof | grep deleted
重启进程或重新打开日志文件。
现象
解决(示例)
/var/log/app.log {
daily
rotate 7
missingok
notifempty
postrotate
kill -USR1 $(cat /var/run/app.pid)
endscript
}
报错示例
concurrent write to log
原因
解决
log.Loggerzap / logrus建议
# 1. 权限
ls -l 日志路径
# 2. 磁盘
df -h
# 3. 文件是否被删
lsof | grep deleted
# 4. 进程用户
ps -ef | grep 你的程序
你可以直接把:
发出来,我可以直接帮你改代码或给配置。