温馨提示×

怎么找Debian Golang日志

小樊
35
2026-07-27 10:45:55
栏目: 编程语言

在 Debian 系统上排查 Golang 应用日志,一般分几种常见场景。下面按「最常见 → 进阶」给你一个实用清单。


一、先看 Golang 程序自己有没有写日志

1️⃣ 标准输出 / 标准错误(最常见)

很多 Golang 程序默认把日志打到:

  • stdout
  • stderr

如果你是直接运行:

./myapp

日志会直接显示在终端。

如果是 systemd 启动的服务,日志不会直接显示,而是进了 journal。


二、Debian + systemd 场景(最常见)

2️⃣ 用 journalctl 查看日志(强烈推荐)

如果 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 日志的首选方式


三、程序自己写日志文件

3️⃣ 常见日志路径

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 / Kubernetes 场景

4️⃣ Docker 容器里的 Golang 日志

docker logs 容器名
docker logs -f 容器名

如果是 Kubernetes:

kubectl logs pod名
kubectl logs -f pod名

五、Golang 程序没日志?可能是这些原因

5️⃣ 常见坑

✅ 日志被重定向了

log.SetOutput(os.Stdout)

或:

log.SetOutput(&lumberjack.Logger{
    Filename: "/var/log/myapp.log",
})

✅ 程序 panic 但没捕获

defer func() {
    if r := recover(); r != nil {
        log.Println("panic:", r)
    }
}()

六、快速定位 Golang 程序在哪里写日志

6️⃣ 查进程打开的文件

ls -l /proc/$(pidof myapp)/fd

或:

lsof -p $(pidof myapp)

重点看:

  • 1 → stdout
  • 2 → stderr
  • .log 文件

七、推荐你用的日志库(如果你在开发)

生产推荐

  • log/slog(Go 1.21+,官方)
  • go.uber.org/zap
  • github.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

如果你愿意,可以把下面信息发我,我可以直接帮你定位

  • Golang 程序是怎么启动的(systemd / docker / 手动)
  • 程序名
  • Debian 版本(cat /etc/os-release

我可以一步一步带你找 ✅

0