关于go:如何在运行时而不是编译时更改glog日志级别?

How to change glog log level at runtime, not compile time?

我正在使用github.com/golang/glog,并且想要在运行时更改标志stderrthreshold或V级日志记录,即无需重新编译二进制文件并重新运行它。 我已经搜索了一些资源,但是所有答案都是在编译时更改的。 无论如何,在运行时是否需要更改它,因为我不想停止我的服务?


glog软件包从标志读取配置。 您可以在运行时从代码中修改标志,以更改glog的行为。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import (
   "flag"
   "fmt"

   "github.com/golang/glog"
)

func main() {
    // glog needs flag.Parse() call
    flag.Parse()
    glog.Info("default level")
    glog.V(3).Info("Level 3 log")
    if glog.V(3) {
        fmt.Println("Changing log level to 5")
        flag.Lookup("v").Value.Set("5")
    }
    glog.V(4).Info("Level 4 log")

    glog.V(5).Info("Level 5 log")

}

结果是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
? ./main --alsologtostderr -v 2
I0223 23:42:26.661984    4587 main.go:12] default level
? ./main --alsologtostderr -v 3
I0223 23:42:28.209673    4600 main.go:12] default level
I0223 23:42:28.210174    4600 main.go:13] Level 3 log
Changing log level to 5
I0223 23:42:28.210210    4600 main.go:18] Level 4 log
I0223 23:42:28.210230    4600 main.go:20] Level 5 log
? ./main --alsologtostderr -v 4
I0223 23:42:30.927222    4614 main.go:12] default level
I0223 23:42:30.928018    4614 main.go:13] Level 3 log
Changing log level to 5
I0223 23:42:30.928072    4614 main.go:18] Level 4 log
I0223 23:42:30.928088    4614 main.go:20] Level 5 log