Go の標準パッケージは、Python の標準ライブラリlog
とは異なり、レベルをサポートしていません。logging
glog
多くのパッケージは、やなどのサードパーティのログ パッケージに頼っていますlogrus
。
サードパーティのロギング パッケージを使用する場合と使用しない場合があるサードパーティのパッケージをインポートする場合、Go の最適なロギング戦略は何ですか。
それで、私が使用しているパッケージがプレーンな古いhttps://golang.org/pkg/log/を使用し、私のメイン パッケージがlog.Info
、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
しかし、 a のような別のパッケージのログ ステートメントを、探しているものであるlog.Info
、またはのようなものに変換する方法は実際にはありません。log.Debug