2016-08-05 103 views
0

標準log Go中的軟件包不支持與Python中的logging標準庫不同的級別。Golang日誌策略

許多軟件包訴諸第三方日誌包,如gloglogrus

當導入可能使用或不使用第三方日誌軟件包的第三方軟件包時,什麼是Go的最佳日誌記錄策略。

+0

你在問什麼? – Plato

回答

2

所以,我覺得你問,如果有什麼我使用用途老式https://golang.org/pkg/log/和我的主包一個包使用一些特別的東西,像log.Infolog.Warnlog.Error,並log.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,這是你在找什麼。