2016-11-08 5 views
3

私はGoでロガーを実装しています。私はこれにlogrusを使うことを考えています。私は組み込みログパッケージの限界を理解したかったのです。GO langログパッケージの制限

ログをファイルに書き込んだり、ローリングファイルのログなどを実装したい場合は、この機能を手動で追加する必要があります。外部のログパッケージを選択する必要がある他の制限はありますか?組み込みlogパッケージは問題ではありません使用してファイルに

答えて

2

ログは、デフォルトos.Stderr、例えばファイル*os.File以外の目的地io.Writerを設定するlog.SetOutput()またはLogger.SetOutput()を使用することができます。不足していると、多くの場合、ログイン平準化されるためwhished何

(例えばINFOWARNなどDEBUGERROR)。推論のために、ブログ投稿Dave Cheney: Let's talk about loggingを読んでください。

log.Loggerは、協力したいと思うパッケージ(例えば、SetLogger()の機能を提供する)がない限り、指定されたパッケージで使用するよう強制することはできません。

ローリングログファイルも欠落しています。

一方、標準ロガーをMongoDBにログインさせるためには、例えば「Go: Create io.Writer inteface for logging to mongodb database」を参照してください。 MongoDBを使用すると、暗黙的に "ローリングファイル"機能を提供するCapped collectionを使用することもできます。

2

ファイルへのロギングは、複数の方法で行うことができます。

12因子アプリのやり方(12因子のアプリのやり方だけではなく、このようなやり方で12の要素のアプリ)は、STDOUTおよび/またはSTDERRにログしてそれをパイプすることです配備のための他の場所これにより、開発も容易になります。また、コンテナのようなものを使ってプログラムをデプロイする場合は、コンテナのSTDOUTとSTDERRをファイルに記録して始めます。

std lib logパッケージには、出力をファイルに変更する2つの方法があります。次のように

一つの方法は次のとおりです。

log.SetOutput(<something that implements io.Writer, probably os.File>) 

log.Println("some message") 

他は次のとおりです。

logger := log.New(<something that implements io.Writer, probably os.File>, <a prefix String>, <some flag, see https://golang.org/pkg/log/#pkg-constants>) 

logger.Println("some message") 

二番目のオプションを使用すると、さまざまなログレベル(すなわちINFO、DEBUG、WARN、ERRORを実装する方法もあり、各レベルを独自のロガーにすることで、

しかし、logrusはこれまでにも多くのことを提供しています。したがって、ロギングをすばやく実装したい場合は、おそらく最善の方法です。

関連する問題