正しい形式(正しいXML、正しいタイムスタンプ形式、正しい形式のカスタムデータ、正しい属性、基本的にXmlWriterTraceListenerとまったく同じ方法)を持つlog4netを使用してファイルにログを記録するための最良の方法は何ですか?サービストレースビューアツール(SvcTraceViewer.exe)?
3 に答える
これが必要な場合は、カスタムレイアウトを作成します。私は(まだ)詳細を見ていませんでしたが、から派生したクラスを作成しましたXmlLayoutBase
。詳細を見るのにもう少し時間が必要です...
独自のアペンダーを作成することもできますが、この場合、レイアウトクラスを作成する方が理にかなっていると思います。
編集:たぶんあなた自身のアペンダーを書くことは良い考えです。その場合、System.ServiceModel.Diagnostics.DiagnosticTrace
クラスを使用できます。それが進むべき道であるかどうかはまだわかりません。今はあまり時間がないのですが、調べてみます。
ここにアイデアがあります:
カスタム log4net Appender を作成し、メッセージを (間接的に) XmlWriterTraceListener に書き込むことができます。Append メソッド内では、メッセージを System.Diagnostics に送信するだけです。
カスタム Appender の 一例を次に示します。
この例では、Append がオーバーライドされています。LoggingEvent クラス/構造体が渡されます。あなたの目的のために (SvcTraceViewer で読み取ることができる出力形式にルーティングされた log4net 出力を取得するため)、出力を System.Diagnostics に書き込むことができます (XmlWriterTraceListener にログを記録するように最初に構成します)。Trace.Write* メソッド、Trace.Trace* メソッド、または TraceSources を使用して書き込むことができます。
TraceSource の場合、TraceSource 名はロガー名 (LoggingEvent クラス/構造で使用可能) と同じであると考えることができます。そのため、xml ファイルに入れたい log4net ロガー名ごとに app.config ファイルで TraceSource を構成できます。Append ロジックは次のようになります。
protected override void Append(LoggingEvent le)
{
TraceSource ts = new TraceSource(le.LoggerName); // Not sure of logger name field in LoggingEvent
ts.TraceEvent(LogLevelToTraceEventType(le.Level), 0, le.FormattedMessage);
}
これにより、必要なものが得られる場合があります。私は実際にこれを行っていないので、それが良いアイデアかどうかはわかりませんが、確かにうまくいくようです.
簡潔で申し訳ありませんが、出発する前にこれを終わらせようとしています。