在 Linux 上,Golang 程序本身并不会自动把日志写到某个固定位置,日志存放在哪里,完全取决于程序自己怎么写,或者你是怎么运行它的。下面分几种常见情况说明:
如果代码里类似这样:
log.SetOutput(os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644))
那日志就在:
/var/log/myapp.log
(路径是开发者自己定义的,不一定在 /var/log)
很多 Go 服务(尤其是 Docker / Kubernetes)只写:
log.Println("hello")
这种情况下:
日志会打印到终端
nohup ./myapp &
日志在:
nohup.out
(在当前目录)
[Service]
ExecStart=/opt/myapp/myapp
日志位置:
journalctl -u myapp.service
或者:
journalctl -u myapp
这些库通常也是你配置路径,例如:
zap.NewProduction()
默认输出到 stdout / stderr
如果配置了:
&lumberjack.Logger{
Filename: "/var/log/myapp/access.log",
}
那就在你配置的文件里。
如果 Go 程序在 Docker 里:
docker logs 容器名
日志一般在:
/var/lib/docker/containers/<容器ID>/<容器ID>-json.log
你可以这样找:
# 搜常见日志目录
ls -lat /var/log | head
# 找进程打开了哪些文件
lsof -p $(pidof myapp)
# 看程序启动命令
ps -ef | grep myapp
Go 日志没有统一位置,写在哪完全看你程序或运行方式
如果你愿意,可以把:
发出来,我可以帮你精确告诉你日志在哪。