在 Debian 上“定位 Golang 日志”通常有几层含义,下面按最常见场景给你一个清晰指引,你可以对照使用。
Go 程序本身不强制日志位置,完全取决于代码怎么写:
log.Println("hello")
fmt.Println("debug")
这类日志通常:
查看方式:
journalctl -u your-service-name
journalctl -u your-service-name -f # 实时
常见写法:
log.SetOutput(os.OpenFile("/var/log/app.log", ...))
或者第三方库(zap / logrus):
writer := zap.NewProductionConfig().OutputPaths
查找日志文件:
sudo find / -name "*.log" 2>/dev/null | grep -i your-app
ls -l /var/log | grep your-app
如果你是用 Debian 的 systemd 跑的:
systemctl status your-service
日志位置本质是:
/var/log/journal/
但不直接看文件,用:
journalctl -u your-service --since "1 hour ago"
pidof your-app
lsof -p <PID> | grep log
ps aux | grep your-app
可能带参数:
-app.log=/var/log/app.log
logFile, _ := os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
log.SetOutput(logFile)
# /etc/systemd/system/myapp.service
[Service]
ExecStart=/opt/myapp
StandardOutput=journal
StandardError=journal
| 问题 | 原因 |
|---|---|
| 日志看不到 | 用 log 但被 systemd 接管 |
| 权限不足 | /var/log 需要 root |
| 日志为空 | 程序没启动或崩在 init |
| 日志乱码 | 时区 / UTF-8 问题 |
cat /etc/os-release)我可以直接给你对应命令或配置模板。