Golang伐木策略

时间:2016-08-05 13:21:51

标签: logging go glog

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

许多软件包使用第三方日志包,例如gloglogrus

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

1 个答案:

答案 0 :(得分:2)

所以,我认为你问,如果我使用的软件包使用普通的https://golang.org/pkg/log/并且我的主软件包使用了一些特殊内容,例如log.Info,{{1 },log.Warnlog.Error

如果程序包向您公开log.Debug对象,则可以使用log.LoggerSetFlagsSetOutput来更改这些日志消息的外观,或者将它们完全静音,但是你不能让它们与你的特殊第三方日志包一起玩得很好。

例如,如果第三部分包看起来像这样:

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.Infolog.Debug这样的内容,这就是你&#39 ;寻找。