You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

glog.Infoln无法输出到控制台问题求助

问题原因及解决方案

原因分析

这个问题是Google glog 库的默认行为导致的:

  • glog.Infoln 属于Info级别日志,默认仅写入日志文件,且会进行缓冲,在程序持续运行(比如你的HTTP服务)时,缓冲内容不会主动刷新到控制台或文件。
  • glog.Errorln 属于Error级别日志,默认会直接输出到标准错误(控制台),且无缓冲延迟,所以能立即看到输出。

另外,glog 默认不会将Info级别日志输出到控制台,仅Error及以上级别会同步输出到控制台。

解决方案

有两种方式可以让Info日志输出到控制台:

方式1:启动时添加命令行参数

运行程序时加上 -logtostderr=true 参数,强制所有级别日志输出到控制台:

./your-program -logtostderr=true -port=50080

方式2:代码中配置glog

在代码里显式设置日志输出到标准错误,需要在 flag.Parse() 之前调用相关配置(因为glog依赖flag包管理参数):
修改main.go的flag相关代码段:

// 先初始化glog的配置,强制日志输出到控制台
flag.Set("logtostderr", "true")

flag.StringVar(&PORT, "port", "50080", "--port=50080 or -port=50080")
flag.Parse()

如果需要让Info日志立即刷新(避免缓冲延迟),可以在写入日志后手动调用glog.Flush(),比如修改中间件:

func WriteToConsole(next http.Handler) http.Handler{
    return http.HandlerFunc(func(w http.ResponseWriter,r *http.Request){
        glog.Infoln(fmt.Sprintf("%v called",r.Method))
        glog.Flush() // 手动刷新缓冲,立即输出日志
        next.ServeHTTP(w,r)
    })
}

注意:手动刷新会带来一定性能开销,仅在必要场景使用。

内容的提问来源于stack exchange,提问作者Scáthach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 02:42:33