あなたPatternConverterの方法があります静的な入力と出力のプロパティを使用すると、正しい方向へのステップになりますすべてのビットが不安定(スレッドセーフな賢明)。
ここでのトリックは、logger.Debug(...)のmessageパラメータがオブジェクトであり、好きなものを渡すことができることを認識することです。
カスタムメッセージの種類
public class InputOutput
{
public string Input {get;set;}
public string Output {get;set;}
}
を定義し、あなたのコンバータは、プロパティのいずれかを読んで
public class InputPatternConverter : PatternConverter
{
protected override void Convert(System.IO.TextWriter writer, object state)
{
var msg = ((LoggingEvent)state).MessageObject as InputOutput;
if (msg != null)
writer.Write(msg.Input);
}
}
public class OutputPatternConverter : PatternConverter
{
protected override void Convert(System.IO.TextWriter writer, object state)
{
var msg = ((LoggingEvent)state).MessageObject as InputOutput;
if (msg != null)
writer.Write(msg.Output);
}
}
ロギングは、あなたの設定は次のようになり非常にクリーン
logger.Debug(new InputOutput { Input = ..., Output = ...});
になってみましょうことができ同じ。
先端しかしPatternLayoutはサブクラスを、そのクラスのコンストラクタにコンバータを追加することです。そのようにして、設定をトリミングすることもできます。これはではありません。は、%messageトークンを失ってしまいます。%inputと%outputトークンは、PatternLayoutがサポートするすべてのトークンに追加されます。
"%date %message %newline%newline %input %newline%newline %output
ここではカスタムパターンレイアウトの迅速な実装です:
public class InputOutputPatternLayout : PatternLayout
{
public InputOutputPatternLayout()
{
AddConverter("input", typeof(InputPatternConverter));
AddConverter("output", typeof(OutputPatternConverter));
}
}
ようにするにですから、実際にこのようなパターンを持つことができます2つのパラメータを取ってILoggerインターフェースへの拡張メソッドとしてこれを実装することができます。次に、使用法は次のようになります:logger.Debug(input、output); –
もう一つの制限はありますが、別のパターンコンバータ(またはPatterLayout?のサブクラス)と別のプロパティを追加しない限り、 "@メッセージ"パラメータを失うことです。私はこれが動作するかどうかはテストしていませんが、ToString()メソッドをオーバーライドして@messageを返すことをお勧めします。 – ilitirit
ああ、ちょうど修正: "状態としてInputOutput"は "((LoggingEvent)状態).MessageObjectとしてInputOutput"のようにする必要があります。 – ilitirit