2010-11-29 7 views
1

誰かがこの質問のより良いタイトルをお勧めします。私は何を置くべきか分からない。log4netカスタムロギング

今のところ、ログされたメッセージの前にILogのインスタンスを囲むログラッパーがあります。私が代わりにしたいのは、ILayoutまたはILoggerまたはIAppenderのいずれかを実装することです。これは、設定XMLで指定することができます。私が前に付けるテキストは静的ではありません。すべてのログエントリで使用されるため、コード内にログメッセージを作成するのではなく、一度実装する必要があります。

これは意味がありますか?どのインタフェースを実装する必要がありますか?今は、PatternLayoutを使用しています。

+0

MSエンタープライズライブラリロギングアプリケーションブロックを見ましたか? – mcass20

+0

いいえ、私たちはlog4netを数年間使っており、満足しています。 – Amy

+0

各ログメッセージにどのような情報を追加したいかについての詳細情報が役立ちます。あなたの設定ファイルにいくつかの "静的な"テキストを設定しますか?追加するテキストは、実行時に厳密に決定されますか?現在メッセージにメッセージを追加する方法のサンプルコードがありますか(おそらくlog4netの呼び出しサイトですか?) – wageoghe

答えて

2

カスタムPatternLayoutConverterの実装に同意します。ここでは例のカップル:

この1つは出力にSystem.Diagnostics.Trace.CorrelationManager.ActivityIdを追加します。

public class ActivityIdLayoutConverter : PatternLayoutConverter 
    { 
    protected override void Convert(System.IO.TextWriter writer, LoggingEvent loggingEvent) 
    { 
     writer.Write(Trace.CorrelationManager.ActivityId.ToString()); 
    } 
    } 

この1がパラメータ化された(それは使用することができますキーを設定することができます私は、キーの値を取ることができPatternLayoutConverterの作成について尋ねた質問に

class KeyLookupPatternConverter : PatternLayoutConverter 
    { 
    protected override void Convert(System.IO.TextWriter writer, LoggingEvent loggingEvent) 
    { 
     string setting; 
     //Option is the key name specified in the config file 
     if (SomeDictionaryWithYourValues.TryGetValue(Option, out setting)) 
     { 
     writer.Write(setting); 
     } 
    } 
    } 

Here is a link:GDCまたはMDCに類似) - 辞書から値を取得します。 log4netとNLogの設定方法と設定方法を示しています。

また、log4netロガーをラップすることもできますし、ラッパーの "Log"メソッドで入力メッセージを変更することもできます。また、カスタム値をGlobalDiagnosticContext.PropertiesまたはThreadDiagnosticContext.Propertiesに配置し、通常のプロパティトークンメソッドを介して出力されます。

4

それはあなたが(複数のアペンダを使用した場合、例えば)それを再利用することを計画する方法に依存しますが、あなたは、ログメッセージのテキストを変更しているので、ILayoutは最良の選択のように聞こえます。

PatternLayoutを継承し、Formatであなたのものを行うことができます。

0

アプリに依存性注入を使用して、後でログを記録する方法を変更することができます。

+0

これは少し極端で、私たちが望む変更の範囲を超えています。インターフェイスを実装し、それをlog4net.xmlファイルで指定する方がはるかに簡単です。 – Amy