温馨提示×

debian golang日志如何检索

小樊
36
2026-09-16 08:27:54
栏目: 编程语言

在 Debian 上运行 Golang 服务时,“日志检索”通常取决于日志写在哪里用什么方式管理。下面按常见场景给你一套实用方案。


一、先确认 Golang 日志在哪里

1. 标准输出(最常见)

很多 Go 程序直接 log.Printlnfmt.Println

log.Println("service started")

如果是 systemd 启动的服务,日志在 journald 中。

查看:

journalctl -u your-service.service

实时查看:

journalctl -u your-service.service -f

按时间:

journalctl -u your-service.service --since "2024-01-01" --until "2024-01-02"

关键字检索:

journalctl -u your-service.service | grep ERROR

2. 日志文件(如 /var/log/xxx.log)

常见写法:

log.SetOutput(os.OpenFile("/var/log/app.log", ...))

检索方式:

# 查看
less /var/log/app.log

# 关键字
grep ERROR /var/log/app.log

# 实时
tail -f /var/log/app.log

# 时间范围
sed -n '/2024-01-01 10:00/,/2024-01-01 11:00/p' /var/log/app.log

二、Golang 日志结构化(强烈推荐)

使用 zap / logrus

logger, _ := zap.NewProduction()
logger.Error("db connect failed", zap.String("host", "127.0.0.1"))

日志示例:

{"level":"error","ts":1700000000,"msg":"db connect failed","host":"127.0.0.1"}

检索:

grep '"level":"error"' app.log

或用 jq

jq 'select(.level=="error")' app.log

三、Debian 常用日志检索工具

1. grep / zgrep

grep -i error /var/log/app.log
zgrep ERROR /var/log/app.log.1.gz

2. less(大文件)

less /var/log/app.log
/ERROR

3. journalctl(systemd)

journalctl -u go-app -p err

四、进阶方案(生产推荐)

1. 日志集中化

  • ELK / EFK
  • Loki + Promtail
  • Grafana + journald

2. Debian 包

apt install lnav   # 高级日志查看器
lnav /var/log/app.log

五、建议的 Go 日志最佳实践

✅ 使用结构化日志(zap / slog)
✅ 输出到 stdout,由 systemd 管理
✅ 日志带 level / time / trace_id
✅ 不要自己写日志轮转,用 logrotate


如果你愿意,可以告诉我:

  • Go 是怎么启动的(systemd? docker? 直接运行?)
  • 日志格式(文本 / json)
  • 想“实时检索”还是“历史分析”

我可以直接给你最合适的一条命令或配置

0