如何从代码中设置 glog 的日志目录

How do I set the log directory of glog from code

有谁知道如何set/modify golang 源代码中的日志目录? 我想在源代码中设置日志目录,而不是在 cmdline

中设置 -log_dir=

glog package 是 Google 中使用的日志包的转储。 Google 使用命令行标志配置日志记录,这就是包所支持的。

如果您想从代码中设置目录,您应该查看 another log package 或 fork 包。

变量 logDir 确实存在于 glog 包中 https://github.com/golang/glog/blob/master/glog_file.go#L41 它只是没有导出。所以你可以在你的 glog 实例的源代码中改变它。有点hacky,但不难。

这是我见过的黑客:在代码中设置标志。 也非常适合从代码设置日志级别。

package main

import (
    "flag"

    "github.com/golang/glog"
)

func main() {
    flag.Parse()
    glog.Info("hi_a")
    flag.Lookup("logtostderr").Value.Set("true")
    glog.Info("hi_b")

    flag.Lookup("log_dir").Value.Set("/path/to/log/dir")

    glog.V(4).Info("v4a")
    flag.Lookup("v").Value.Set("10")
    glog.V(4).Info("v4b")
    //etc.    
}

>>> hi_b
>>> v4b

首先Glog依赖包Flag。如果您不导入它,您将在日志消息中收到烦人的警告。

如果在初始化时只需要设置一次参数就非常简单了。

flag.Set("logtostderr", "true")
flag.Parse()
glog.Infof("starting main program")