2009-08-03 24 views
9

パターンをラップしています&慣習.NETで書かれたアプリケーションのエンタープライズライブラリロギングアプリケーションブロック。シングルトンロガー、スタティックロガー、ファクトリーロガー...ログの記録方法は?

私は、ロガーをサブクラス化(つまり、ドメイン固有のロギングを提供)できるようにしたいと考えています。

これを行うにはどのような方法が最適ですか?

たとえば、私は現時点で静的なLoggerクラスを持っていますが、これはドメイン固有のログ用に特殊化することができません。例えば

Log(MyDomainObj obj, string msg)

答えて

12

チェックアウトNLog。あなたはその後、myDomainLoggerが属するクラスに基づいて出力を特化することができます

private static Logger myDomainLogger = LogManager.GetCurrentClassLogger(); 

:彼らは、パターンのこの種を使用します。

もっと詳しく:

class MyDomain 
{ 
    private static Logger _logger = LogManager.GetCurrentClassLogger(); 

    private void SomeFunc() 
    { 
     _logger.Trace("this is a test"); 
    } 
} 

次に、あなたの出力に次のメッセージ「これはテストです」の一環として、それを出力「MyDomain.SomeFunc」を持つことができます。

5

また、チェックアウトlog4net。 ELのロギングがlog4netほどフレキシブルであることはありませんでした。私はすでにlog4jを使い慣れていたのでlog4netを選択しました。このようにそれをやって

protected readonly log4net.ILog LOG = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

、私はこのようなログを取得することができます:

2009-07-15 09:48:51674 [4420] DEBUG SampleNamespace.SampleClass [(ヌル)] - あなたが出力したいメッセージの例

4

それ以上のこともできます。 Nlogまたはlog4netまたはその他のものをラップするラッパークラスを作成します。そのラッパークラスを使用することができます(コードを実際にデカップルしたい場合は、インターフェイスを使用することもできます)。このようにして、ロガークラスを変更する場合は、1つのクラスだけを変更し、すべてのクラスを編集する必要はありません。

+2

これは設計の観点からは、これが行く方法です。 – Mantzas

+0

Common.Loggingのように利用可能なラッパーが既にあります。 – Onur

関連する問題