在 Debian 系统上排查 Golang 应用日志,一般分几种常见场景。下面按「最常见 → 进阶」给你一个实用清单。
很多 Golang 程序默认把日志打到:
stdoutstderr如果你是直接运行:
./myapp
日志会直接显示在终端。
如果是 systemd 启动的服务,日志不会直接显示,而是进了 journal。
如果 Golang 程序是通过 systemd 启动的:
journalctl -u 服务名
例如:
journalctl -u myapp
常用参数:
# 实时查看
journalctl -u myapp -f
# 查看最近 100 行
journalctl -u myapp -n 100
# 按时间
journalctl -u myapp --since "2025-01-01" --until "2025-01-02"
✅ 这是 Debian 上找 Golang 日志的首选方式
Golang 程序可能写日志到:
/var/log/myapp.log
/var/log/myapp/
$HOME/logs/
./logs/
快速查找:
find / -name "*.log" 2>/dev/null | grep -E "go|app"
或:
ls -lh /var/log/
docker logs 容器名
docker logs -f 容器名
如果是 Kubernetes:
kubectl logs pod名
kubectl logs -f pod名
log.SetOutput(os.Stdout)
或:
log.SetOutput(&lumberjack.Logger{
Filename: "/var/log/myapp.log",
})
defer func() {
if r := recover(); r != nil {
log.Println("panic:", r)
}
}()
ls -l /proc/$(pidof myapp)/fd
或:
lsof -p $(pidof myapp)
重点看:
1 → stdout2 → stderr.log 文件✅ 生产推荐
log/slog(Go 1.21+,官方)go.uber.org/zapgithub.com/rs/zerolog示例(slog):
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
logger.Info("hello debian")
| 场景 | 命令 |
|---|---|
| systemd 服务 | journalctl -u 服务名 |
| 实时日志 | journalctl -f |
| 程序日志文件 | /var/log/ |
| Docker | docker logs |
| 进程文件 | lsof -p PID |
如果你愿意,可以把下面信息发我,我可以直接帮你定位:
cat /etc/os-release)我可以一步一步带你找 ✅