我可以在Glog中设置全局日志记录级别吗?

时间:2018-06-15 15:45:42

标签: amazon-web-services go aws-lambda glog

在Java中,我通常使用的语言,日志库的一个共同特征是能够设置“全局”日志记录级别 - 例如发出日志文件,如果级别是警告或更高,否则,无论进行日志记录的模块如何。

我想在Glog中执行相同操作,一起也只记录标准错误,而不是文件。

如何?

UPDATE:当控件传递给我的代码时,可执行文件已经启动了 - 我正在运行AWS Lambda函数 - 所以我不确定我是否可以选择设置命令行上的Glog状态。我可以用函数调用吗?

我是GoLang的新手,我想我只是不理解Go的内部逻辑。因为我的思想无法穿透Glog docs。所以这个问题可能看起来很幼稚。

3 个答案:

答案 0 :(得分:1)

好吧,我浏览了文档,glog是由标志控制的,所以它们必须存在才能使它工作。在您的情况下,您必须在运行时设置它们。您将要设置logtostderr=true以登录到stderr并将严重性级别设置为可能的选项之一:
 stderrthreshold=[WARNING|ERROR|INFO|FATAL]

示例:

package main

import (
    "flag"
    "fmt"
    "os"

    "github.com/golang/glog"
)

func usage() {
    flag.PrintDefaults()
    os.Exit(2)
}

func init() {
    flag.Usage = usage
    flag.Set("logtostderr", "true")
    flag.Set("stderrthreshold", "WARNING")
    flag.Set("v", "2")
    // This is wa
    flag.Parse()
}

func main() {
    number_of_lines := 10
    for i := 0; i < number_of_lines; i++ {
        glog.V(2).Infof("LINE: %d", i)
        message := fmt.Sprintf("TEST LINE: %d", i)
        glog.Warning(message)
    }
    glog.Flush()
}

输出:

$ ./stackoverflow.exe
I0615 11:03:47.589969   11776 main.go:30] LINE: 0
W0615 11:03:47.590469   11776 main.go:32] TEST LINE: 0
I0615 11:03:47.590969   11776 main.go:30] LINE: 1
W0615 11:03:47.590969   11776 main.go:32] TEST LINE: 1
I0615 11:03:47.590969   11776 main.go:30] LINE: 2
W0615 11:03:47.590969   11776 main.go:32] TEST LINE: 2
I0615 11:03:47.590969   11776 main.go:30] LINE: 3
W0615 11:03:47.590969   11776 main.go:32] TEST LINE: 3
I0615 11:03:47.590969   11776 main.go:30] LINE: 4
W0615 11:03:47.590969   11776 main.go:32] TEST LINE: 4
I0615 11:03:47.591469   11776 main.go:30] LINE: 5
W0615 11:03:47.591469   11776 main.go:32] TEST LINE: 5
I0615 11:03:47.591469   11776 main.go:30] LINE: 6
W0615 11:03:47.591469   11776 main.go:32] TEST LINE: 6
I0615 11:03:47.591469   11776 main.go:30] LINE: 7
W0615 11:03:47.591469   11776 main.go:32] TEST LINE: 7
I0615 11:03:47.591469   11776 main.go:30] LINE: 8
W0615 11:03:47.591469   11776 main.go:32] TEST LINE: 8
I0615 11:03:47.591469   11776 main.go:30] LINE: 9
W0615 11:03:47.591469   11776 main.go:32] TEST LINE: 9

答案 1 :(得分:1)

据我所知,他们没有提供您正在寻找的功能。但是,似乎您可以非常轻松地使用Adapter Pattern for。

我在这里为您创建了一个准系统实现:https://play.golang.org/p/LJPWwF0gTgB

虽然,我建议您查看另一个日志库,它提供的内容更像您想要的内容。我个人使用https://github.com/uber-go/zap,因为它也很好地与Jaeger的opentracing紧密相关,除了编写日志之外,这是我通常需要的东西。

我认为zap可能感觉更正确,但我也没有关于你的用例的上下文与glog有任何问题。只是一种可能有帮助的偏好。

答案 2 :(得分:0)

Kubernetes klog是glog的一个分支,它解决了一些令人讨厌的问题,例如全局标志设置

https://github.com/kubernetes/klog

package main

import (
    "flag"
    "fmt"
    "k8s.io/klog"
)

func main() {
    klog.InitFlags(nil)
    flag.Set("logtostderr", "true")
    flag.Set("stderrthreshold", "WARNING")
    flag.Set("v", "2")
    flag.Parse()

    number_of_lines := 10

    for i := 0; i < number_of_lines; i++ {
        klog.V(2).Infof("LINE: %d", i)
        message := fmt.Sprintf("TEST LINE: %d", i)
        klog.Warning(message)
    }
    klog.Flush()
}