Golang 日志“不显示”通常不是语言本身的问题,而是输出位置、时机、配置或运行方式导致的。下面按最常见原因 → 排查方法给你一个系统排查清单。
现象
fmt.Println 能看到log 包却看不到原因
log.Println("hello")
默认输出到 stderr,而不是 stdout。
验证
go run main.go 2>&1
解决
log.SetOutput(os.Stdout)
现象
原因
os.Exit()panic示例
package main
import "log"
func main() {
go log.Println("不会显示")
os.Exit(0)
}
解决
os.Exit(0) 直接退出time.Sleep(time.Second)
现象
logrus / zap / zerolog 等原因
示例(logrus)
log.SetLevel(log.WarnLevel)
解决
log.SetLevel(log.DebugLevel)
现象
原因
排查
ls /proc/<pid>/fd
Docker 常见
docker logs <container_id>
现象
示例
go func() {
log.Println("hello")
}()
解决
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
log.Println("hello")
}()
wg.Wait()
现象
原因
解决
示例(zap)
logger, _ := zap.NewProduction()
logger.Info("hello")
Production 模式
解决
logger, _ := zap.NewDevelopment()
package main
import (
"log"
"os"
)
func main() {
log.SetOutput(os.Stdout)
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("✅ 日志正常显示")
}
你可以逐条确认:
log 还是第三方库?os.Exit()?如果你愿意,可以直接贴:
我可以直接帮你定位是哪一条原因 ✅