2016-08-05 2 views
0

標準logパッケージには、Pythonでlogging標準ライブラリとは異なり、レベルをサポートしていません。Golangログ戦略

多くのパッケージには、このようなgloglogrusなどのサードパーティのログパッケージに頼ります。

またはサードパーティのロギングパッケージを使用しない場合があり、サードパーティ製のパッケージをインポートするときに行くための最善のロギング戦略は何ですか。

+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.Info、またはlog.Debugのようなものがあります。これはあなたが探しているものです。