温馨提示×

golang日志在linux在哪存

小樊
32
2026-10-26 01:56:48
栏目: 编程语言

在 Linux 上,Go 程序本身的日志存放在哪里,取决于你的代码怎么写,Go 语言本身没有默认的日志文件位置。下面分情况说明:


一、Go 标准库 log 默认情况

log.Println("hello")
  • 默认输出位置:标准错误(stderr)
  • 在 Linux 中:
    • 如果你在终端运行:
      ./myapp
      
      日志直接打印在终端
    • 如果你用 systemd / nohup / 容器:
      • 日志会被重定向到:
        • systemd journal
        • nohup.out
        • 容器日志(docker logs)

✅ 没有写文件,除非你自己指定


二、常见日志存放位置(实际项目中)

1️⃣ 自己写文件(最常见)

log.SetOutput(os.OpenFile("/var/log/myapp/app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644))

常见路径:

/var/log/myapp/
/var/log/myapp.log
/data/logs/myapp/

2️⃣ systemd 管理的 Go 服务

如果你用 systemd:

[Service]
ExecStart=/usr/local/bin/myapp

日志位置:

journalctl -u myapp.service

或:

/var/log/journal/

3️⃣ Docker 容器中的 Go 日志

Go 日志输出到 stdout / stderr:

docker logs 容器名

实际位置:

/var/lib/docker/containers/xxx/xxx-json.log

4️⃣ 使用日志库(如 zap / logrus / zerolog)

这些库:

  • 可写文件
  • 可输出到 stdout
  • 可接 syslog

示例(zap):

zap.NewProduction() // 默认 stderr

三、如何确认你的 Go 日志在哪?

  1. 看代码中有没有:
    log.SetOutput
    os.OpenFile
    
  2. 看启动方式:
    • 终端?
    • systemd?
    • docker?
  3. 查进程打开的文件:
    lsof -p <pid> | grep log
    

四、总结一句话

Go 日志在 Linux 上没有固定位置,默认在终端 / stderr,真正存哪由你的代码和启动方式决定。

如果你愿意,可以把你的 Go 启动方式或日志代码贴出来,我可以帮你精确定位日志文件。

0 踩