温馨提示×

linux下golang日志咋排查

小樊
62
2026-09-05 15:15:15
栏目: 编程语言

在 Linux 下排查 Golang 程序的日志问题,通常可以从日志本身、程序运行方式、系统层面、代码层面几个角度入手。下面按实战思路给你梳理一套方法。


一、先确认日志“在哪里”

1. 标准输出 / 标准错误

很多 Go 程序直接打到:

  • stdout(标准输出)
  • stderr(标准错误)

不同启动方式位置不同:

# 前台运行
./app

# nohup
nohup ./app > app.log 2>&1 &

# systemd
journalctl -u your-service -f

2. 常见日志库输出位置

  • log 标准库:默认 stderr
  • zap / logrus:一般写文件或 stdout
  • 配置文件里常写:
log:
  file: /var/log/app/app.log

先 ps + lsof 看文件:

ps aux | grep app
lsof -p <pid> | grep log

二、实时看日志(最常用)

tail -f /var/log/app/app.log

多文件:

tail -f app.log error.log

按关键字:

tail -f app.log | grep ERROR

三、systemd 场景(服务器最常见)

如果是 systemd 服务:

journalctl -u your-service -f
journalctl -u your-service --since "10 min ago"
journalctl -u your-service -p err

配置文件示例:

[Service]
StandardOutput=journal
StandardError=journal

四、日志级别不对 / 看不到日志

1. 检查日志级别

常见级别:

debug < info < warn < error

代码里确认:

logger.SetLevel(logrus.InfoLevel)

或 zap:

zap.NewProductionConfig().Level = zap.NewAtomicLevelAt(zap.DebugLevel)

2. 临时提高日志级别

  • 改配置文件
  • 环境变量
LOG_LEVEL=debug ./app

五、程序“没日志就退了”

1. panic 没捕获

Go panic 默认打到 stderr:

./app 2>err.log
cat err.log

2. 加 defer recover

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

六、结合系统工具排查

1. dmesg(OOM / 崩溃)

dmesg | tail

看是否有:

Out of memory: Kill process

2. strace(看程序在干嘛)

strace -f -e trace=write -p <pid>

3. lsof(看日志文件)

lsof -p <pid> | grep log

七、日志太多 / 不好查

1. 按时间 / 级别过滤

grep "2026-01-21 10:" app.log | grep ERROR

2. 日志轮转

确认是否用了:

  • logrotate
  • zap 的 Rotation
ls -lh /var/log/app/

八、推荐做法(避免以后难查)

✅ 用结构化日志(zap / slog)
✅ 日志带:

  • time
  • level
  • trace_id
  • goroutine id(调试用)

✅ 关键路径打 debug 日志
✅ panic 一定 recover + 写日志


九、快速排查清单(可直接用)

# 1. 找进程
ps aux | grep app

# 2. 看日志文件
lsof -p <pid> | grep log

# 3. 实时看
tail -f <logfile>

# 4. systemd
journalctl -u app -f

# 5. 错误
grep ERROR app.log | tail -50

如果你愿意,可以把:

  • 用的日志库(log / zap / logrus / slog)
  • 启动方式(终端 / nohup / systemd / docker)
  • 具体现象(没日志 / 日志不全 / panic)

发出来,我可以直接帮你定位。

0 踩