Go中的标准log
包不支持与Python中的logging
标准库不同的级别。
许多软件包使用第三方日志包,例如glog
或logrus
。
在导入可能使用或不使用第三方日志包的第三方软件包时,Go的最佳日志记录策略是什么。
答案 0 :(得分:2)
所以,我认为你问,如果我使用的软件包使用普通的https://golang.org/pkg/log/并且我的主软件包使用了一些特殊内容,例如log.Info
,{{1 },log.Warn
和log.Error
?
如果程序包向您公开log.Debug
对象,则可以使用log.Logger
,SetFlags
,SetOutput
来更改这些日志消息的外观,或者将它们完全静音,但是你不能让它们与你的特殊第三方日志包一起玩得很好。
例如,如果第三部分包看起来像这样:
SetPrefix
然后我可以像这样沉默:
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.Info
或log.Debug
这样的内容,这就是你&#39 ;寻找。