在 Linux 下,Go(Golang)程序本身的“日志在哪”取决于程序怎么写的,Go 语言本身不会自动产生系统日志。下面分几种常见情况说明:
log 的日志去哪了?如果你用的是:
log.Println("hello")
默认是输出到 标准错误(stderr)。
./myapp
日志直接打印在终端。
nohup ./myapp > app.log 2>&1 &
日志在:
app.log
[Service]
ExecStart=/opt/myapp
日志不在文件里,而在 journald:
journalctl -u myapp.service
这些库默认也是输出到 stdout / stderr,除非你显式配置:
logger, _ := zap.NewProduction()
生产模式会输出 JSON 到 stderr
✅ 想写文件,需要自己配置:
writer := zapcore.AddSync(&lumberjack.Logger{
Filename: "/var/log/myapp/app.log",
MaxSize: 10,
MaxBackups: 5,
})
go build / go run 只输出到终端/var/log/go.log 的东西| 场景 | 日志位置 |
|---|---|
| 终端运行 | 终端 |
| nohup | nohup.out 或你重定向的文件 |
| systemd | journalctl -u 服务名 |
| Docker | docker logs 容器名 |
| 自己写文件 | 你在代码里指定的路径 |
# 找进程
ps aux | grep myapp
# 看打开的文件
ls -l /proc/<pid>/fd
# systemd
journalctl -u myapp -f
如果你愿意,可以告诉我:
我可以帮你精确定位日志文件。