2016-02-27 10 views
6

Serilogと私が作成した既存のマルチクラスレイヤーおよびマルチアセンブリソリューションを統合しています。私が使っていた以前のロギング手法は、単純にイベントでレイヤーの上に文字列を渡すことでした。私はこれから離れたいと思っています。マルチプロジェクトソリューション用の1つのロガー

app.configファイルを使用して、ライブラリ内の各クラスにロガー設定を読み込むことができますが、これはどのようにしてマルチアセンブリプロジェクトで行うことができますか。

トップレベル/スタートアッププロジェクトと2つのクラスライブラリプロジェクトがあります。私は、プログラム全体に対して2つのシンクを持つ同じロガーを使用したいと思います。

これらは私が見つけた記事は、これまで

https://github.com/serilog/serilog/wiki/AppSettings

http://nblumhardt.com/2014/04/xml-configuration-for-serilog/

誰かがこれを実現する方法を説明してもらえますか?

答えて

5

Serilogでは、プログラムごとにロガー設定を使用できます。クラスごとのログを調整することは可能ですが、これは通常、フィルタリングなどの事実の後に行われます。

推奨されるアプローチは、次のとおりです。

Program.Main()に最初のものとしてSerilogを設定したり、アプリのエントリポイントがあるところはどこでも:

Log.Logger = new LoggerConfiguration() 
    .WriteTo.Sink1() 
    .WriteTo.Sink2() 
    .CreateLogger(); 

お知らせこれは静的Logクラスを設定します。あなたのアプリのどこかで次のように書くことができます:

Log.Information("This is a message"); 

メッセージは両方のシンクに渡されます。静的なLogを回避して代わりに​​を渡すことができますが、ここでの設定が強くなければ、静的なオプションは面倒ではありません。

XML/appSettings設定はこれを変更しません。

Log.Logger = new LoggerConfiguration() 
    .ReadFrom.AppSettings() 
    .CreateLogger(); 

そして追加:

<add key="serilog:write-to:Sink1" /> 
<add key="serilog:write-to:Sink2" /> 

App.configに同じ効果を持つことになりますそれはちょうどそうに、コードの最初のブロックを変更し、設定ファイルにいくつかの詳細を移動します。 XMLを避けることができるのであれば、コードの設定はしばしば面倒ではありません(動く部品が少なくなります)。

関連する問題