Golangのレベルベースのロギングに利用可能な良いラッパーはありますか?そうでない場合、自分で実装するにはどうすればよいですか?
私が欲しいのは非常に簡単です。私はいくつかの機能が欲しい.
log.Error()
log.Info()
など、出力をstdoutに表示し、これらをログファイルに保存します(コマンドライン引数としてプログラムに指定されたレベルに基づいて)。このラッパーを実装するにはどうすればよいですか?
既存の回答がかなり古いため、さらにいくつかの提案があります。
http://cgl.tideland.biz を見て、そこにパッケージ「applog」があります。そのように機能しています。
PS:現在、CGL全体が改訂されており、新しい機能を備えてすぐにリリースされますが、名前は異なります。 ;)
両方のライブラリにはレベルフックもあり、これは非常に興味深い機能です。特定のログレベルのフックを登録できます。したがって、たとえば、log.Error()
を使用して記録されたエラーが発生した場合、監視ツールなどに報告できます。
seelog はあなたの requirements に当てはまると思うし、ログの議論で頻繁にポップアップするのでかなり人気があるようだ。私はそれを真剣に使用したことがないので、それ以上コメントすることはできません。
stdlog あなたの要件にぴったり:
log := stdlog.GetFromFlags()
log.Info("Connecting to the server...")
log.Errorf("Connection failed: %q", err)
現時点では rlog を使用しており、そのアプローチが気に入っています。コードは見栄えがよく、単純で、十分に文書化されています。
私を確信させたもの:
rlog.Info()
は参照を渡さずにどこでも使用できますrlog.Trace(4, "foo")
https://github.com/hashicorp/logutils これは非常に使いやすいことがわかり、stdライブラリのlog.Printf
へのメソッド呼び出しを変更する必要さえありません。
組み込みのGoログパッケージにログレベルのサポートを追加しました。ここで私のコードを見つけることができます:
https://github.com/gologme/log
Info、Warn、およびDebugのサポートの追加に加えて、ユーザーは独自の任意のログレベルを定義することもできます。ロギングレベルは個別に有効化および無効化されます。これは、他のすべてを取得せずにデバッグログを有効にできることを意味します。