49

logパッケージを利用する、高度にインストルメント化されたコードがいくつかあります。いよいよロギングをオフにするときが来ましたが、標準のロガーをオフにする方法がわかりません。

私は何かを逃しましたか?ログ呼び出しを行う前にフラグをチェックする必要がありますか、それとも本番環境でコメントアウトする必要がありますか?

4

6 に答える 6

122

io / ioutilパッケージに存在する場合、共通のio.Writer用に独自のタイプを作成する理由はありません。

import (
    "log"
    "io/ioutil"
)

func init() {
    log.SetOutput(ioutil.Discard)
}
于 2012-05-21T15:25:03.397 に答える
4
type NullWriter int
func (NullWriter) Write([]byte) (int, error) { return 0, nil }

// ...

log.SetOutput(new(NullWriter))
于 2012-05-13T11:06:42.467 に答える
3

このアプローチにより、実行時にログのオンとオフを切り替えることができます。

type LogWriter struct{
    enabled bool
}

func (l *LogWriter) Enable() {
    l.enabled = true
}

func (l *LogWriter) Disable() {
    l.enabled = false
}

func (l *LogWriter) Write([]byte) (int, error) {
    if l.enabled {
        //...
    }
    return 0, nil
}

そして、このアプローチは、ランタイム全体のロギングを有効または無効にします。

type LogWriter struct{}

func (l *LogWriter) Write([]byte) (int, error) {
    if some.Constant {
        //...
    }
    return 0, nil
}

wheresome.Constantは、コンパイル前に設定する定数 ( 「プロダクション」バイナリを生成する) またはコマンドライン フラグを介してプログラムを実行するときに一度だけ設定される変数 (のようなものmyprogram --enable-logging=true)のいずれかになります。

どちらのアプローチでも、現在のコードをほとんどそのままにしておくことができます。

于 2012-05-13T20:03:07.280 に答える
0

このログ機能や他のログ機能を探してここに来る他の人へのメモ:ログのオフ、ログレベルの設定、ログローテーション、ファイルへのリダイレクトなどをカバーするlog4goパッケージをご覧ください。

http://godoc.org/code.google.com/p/log4goのドキュメントを参照してください

于 2012-09-29T07:50:33.420 に答える