温馨提示×

debian golang日志为何变大

小樊
43
2026-10-18 20:00:20
栏目: 编程语言

在 Debian 上用 Golang 写的程序,日志“突然变大 / 越来越大”,通常不是 Debian 本身的问题,而是日志写入方式 + 程序行为 + 系统环境共同导致的。下面按常见原因给你一个系统性的排查清单。


一、最常见原因

1. 日志没有按大小/时间切割(最常见)

如果你用的是:

log.Println(...)

或:

fmt.Fprintln(logFile, ...)

而没有 log rotate,那文件只会无限增长。

✅ 解决:

  • 使用 logrotate(Debian 自带)
  • 或代码里用:
    • lumberjack
    • zap + rotate
    • logrus + hook

示例(lumberjack):

&lumberjack.Logger{
    Filename:   "/var/log/app.log",
    MaxSize:    100, // MB
    MaxBackups: 5,
    MaxAge:     30,  // days
}

2. 程序 panic / 错误循环打印

Go 服务常见现象:

  • 网络断了
  • DB 连不上
  • goroutine 死循环

结果:

connection refused
connection refused
connection refused
...

每秒几百行。

✅ 排查:

tail -f /var/log/app.log

看是否有重复错误刷屏。


3. systemd 的 journald 把日志“存了两份”

Debian + systemd 很常见:

  • 程序打到 stdout
  • systemd 接住 → journald
  • 你又写到文件

结果:

  • /var/log/app.log
  • /var/log/journal/

✅ 检查:

journalctl -u your-service
du -sh /var/log/journal

✅ 解决:

  • 二选一:
    • 只写文件
    • 只打 stdout(推荐容器/云环境)

4. 日志级别设置太低

例如:

log.SetLevel(log.DebugLevel)

生产环境还在 Debug。

✅ 建议:

  • prod:info / warn
  • debug 只在排查时开

5. 请求量暴涨(正常但被忽略)

Go 性能太好,QPS 很高:

  • 每个请求一行日志
  • 一天几十 GB

✅ 优化:

  • 采样日志
  • 关键路径才记
  • 用结构化日志(zap)

二、Debian 特有注意点

6. logrotate 没生效

检查:

cat /etc/logrotate.d/your-app

常见错误:

  • 没 postrotate systemctl reload xxx
  • 文件权限不对
  • 日志路径写错

测试:

logrotate -d /etc/logrotate.d/your-app

7. 磁盘 inode 没满但 size 暴涨

df -h
df -i

有时不是“大”,而是小文件太多。


三、快速自查命令(建议你直接跑)

# 看哪个日志大
du -sh /var/log/*

# 看实时增长
tail -f /var/log/app.log

# 看 systemd 日志大小
journalctl --disk-usage

# 看进程在写什么
lsof -p <pid> | grep log

四、推荐生产方案(一步到位)

Go + 日志最佳实践:

  • 日志库:zap 或 logrus
  • 文件切割:lumberjack
  • 系统层:logrotate
  • 容器/云:只打 stdout

如果你愿意,可以把:

  • 用的日志库
  • 是否 systemd
  • 日志路径
  • 日志样例

贴出来,我可以直接帮你定位是哪一条导致的。

0 踩