在 Linux 下,Golang 程序本身的日志存放位置并不是由 Go 语言规定的,而是由你的程序代码或使用的日志库决定。下面分几种常见情况说明:
log(不指定文件时)如果你用的是:
log.Println("hello")
./app
日志会打印在当前终端./app > app.log 2>&1
日志就保存在:
当前目录/app.log
log 指定日志文件logFile, _ := os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
log.SetOutput(logFile)
日志位置由你写死决定,例如:
/var/log/myapp.log
zap.NewProduction()
默认输出到 stderr
常见配置:
&zapcore.FileWriter{
Filename: "/var/log/app/app.log",
}
log.SetOutput(os.Stdout)
或:
file, _ := os.OpenFile("/var/log/app.log", ...)
log.SetOutput(file)
如果你用 systemd 启动:
[Service]
ExecStart=/usr/local/bin/app
日志位置是:
journalctl -u yourapp.service
或:
/var/log/journal/
| 场景 | 路径 |
|---|---|
| 系统服务日志 | /var/log/ |
| 自定义应用 | /var/log/yourapp/ |
| Docker 容器 | docker logs 容器名 |
| systemd | journalctl |
log.SetOutput> log如果你愿意,可以把你的启动方式或日志代码贴出来,我可以直接告诉你日志具体在哪。