如果不符合要求的级别,glog内容是否会被执行

时间:2017-03-17 04:52:07

标签: go

问题很简单,我有一个这样的日志:

glog.v(5).Infof("xxx %v", getLogContent())

但是我的getLogContent() 是耗时的方法,所以我想问:当我的程序不符合v(5)级别时,getLogContent()是否已执行?

2 个答案:

答案 0 :(得分:2)

如果您不希望getLogContent()运行

,则应添加if语句
if glog.V(5) {
    glog.V(5).Infof("xxx %v", getLogContent())
}

Go计算所有参数,因此将调用getLogContent,但如果未达到详细程度,则不会记录输出。

答案 1 :(得分:0)

我好奇并且玩弄这个。我不知道这对你有用,但有趣。

通过使用lambda函数,并创建一个实现Stringer接口的函数类型,Go格式库将在需要打印时调用它。

我找不到一种我真正喜欢创建函数类型的方法,也许别人知道更好的技巧。

package main

import (
    "fmt"
    "os"
    "time"
)

type thing func() string

func (t thing) String() string {
    return t()
}

func toThing(f func() string) thing {
    return f
}

func maybePrint(p bool, args ...interface{}) {
    if p {
        fmt.Println(args...)
    }
}

func main() {
    maybePrint(len(os.Args) > 2, "testing", toThing(func() string {
        fmt.Println("Calculating big thing")
        time.Sleep(time.Second)
        return "test"
    }))
}