gpt4 book ai didi

logging - Golang 日志记录策略

转载 作者:数据小太阳 更新时间:2023-10-29 03:05:54 24 4
gpt4 key购买 nike

与 Python 中的 logging 标准库不同,Go 中的标准 log 包不支持级别。

许多包求助于第三方日志包,例如 gloglogrus

当导入可能使用或不使用第三方日志包的第三方包时,Go 的最佳日志记录策略是什么。

最佳答案

所以,我想你是在问,如果我正在使用的包使用普通的旧 https://golang.org/pkg/log/ 怎么办?我的主包使用了一些特殊的东西,比如 log.Infolog.Warnlog.Errorlog.Debug?

如果包向您公开了 log.Logger 对象,您可以使用 SetFlagsSetOutputSetPrefix 改变这些日志消息的样子,或者完全使它们静音,但您不能让它们与您的特殊第三方日志包一起玩得很好。

例如,如果第三方包如下所示:

package sayhello

import (
"log"
"os"
)

type SayHello {
Logger *log.Logger
}

func NewSayHello() (SayHello) {
logger, _ := os.OpenFile("/tmp/tmp.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
var sh SayHello
sh.Logger = log.New(logger, "SAY HELLO LOGGER: ", log.Ldate|log.Ltime|log.Lshortfile)
return sh
}

func (sh SayHello) Run() {
sh.Logger.Println("Hello. I ran!")
}

然后我可以像这样让它静音:

package main

import (
"sayhello"
"io/ioutil"
)

func main() {
sh := sayhello.NewSayHello()
sh.Run()
// output is: 2016/08/10 16:47:46 SAY HELLO LOGGER: Hello. I ran!
sh.Logger.SetOutput(ioutil.Discard)
sh.Run()
// output is nothing
}

但实际上您无法将另一个包中的日志语句(如 log.Println)翻译成类似 log.Infolog.Debug 的内容,这就是您要查找的内容。

关于logging - Golang 日志记录策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38790378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com