web-dev-qa-db-ja.com

golangでレベルベースのロギングを実装する方法は?

Golangのレベルベースのロギングに利用可能な良いラッパーはありますか?そうでない場合、自分で実装するにはどうすればよいですか?

私が欲しいのは非常に簡単です。私はいくつかの機能が欲しい.

log.Error()
log.Info()

など、出力をstdoutに表示し、これらをログファイルに保存します(コマンドライン引数としてプログラムに指定されたレベルに基づいて)。このラッパーを実装するにはどうすればよいですか?

42
pymd

既存の回答がかなり古いため、さらにいくつかの提案があります。

45
Bryan

http://cgl.tideland.biz を見て、そこにパッケージ「applog」があります。そのように機能しています。

PS:現在、CGL全体が改訂されており、新しい機能を備えてすぐにリリースされますが、名前は異なります。 ;)

4
themue
  • ber-go/Zap :Goでの高速、構造化、レベル化されたロギング
  • Logrus :Go用の構造化されたプラグ可能なロギング。 (JSONとテキストのフォーマット)

両方のライブラリにはレベルフックもあり、これは非常に興味深い機能です。特定のログレベルのフックを登録できます。したがって、たとえば、log.Error()を使用して記録されたエラーが発生した場合、監視ツールなどに報告できます。

4
Ankit Deshpande

seelog はあなたの requirements に当てはまると思うし、ログの議論で頻繁にポップアップするのでかなり人気があるようだ。私はそれを真剣に使用したことがないので、それ以上コメントすることはできません。

4
mna

stdlog あなたの要件にぴったり:

log := stdlog.GetFromFlags()
log.Info("Connecting to the server...")
log.Errorf("Connection failed: %q", err)
2
Ale

現時点では rlog を使用しており、そのアプローチが気に入っています。コードは見栄えがよく、単純で、十分に文書化されています。

私を確信させたもの:

  • 外部依存関係なし
  • rlog.Info()は参照を渡さずにどこでも使用できます
  • 環境変数の適切な使用法
  • 任意の数のトレースレベルrlog.Trace(4, "foo")
1
noreabu

https://github.com/hashicorp/logutils これは非常に使いやすいことがわかり、stdライブラリのlog.Printfへのメソッド呼び出しを変更する必要さえありません。

1
Jorge Marey

組み込みのGoログパッケージにログレベルのサポートを追加しました。ここで私のコードを見つけることができます:

https://github.com/gologme/log

Info、Warn、およびDebugのサポートの追加に加えて、ユーザーは独自の任意のログレベルを定義することもできます。ロギングレベルは個別に有効化および無効化されます。これは、他のすべてを取得せずにデバッグログを有効にできることを意味します。

1
jordan2175