デフォルトのトレースリスナーは、win32 api OutputDebugStringを使用します。既存のツールを使用して、このメソッドに渡されたメッセージを聴くことができます。例えば、このを見て:
http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx
たぶん、あなたはそれはあなた自身を記述するのにかかる時間を節約すること。
独自の記述を行いたい場合は、トレース・ビューア・アプリケーションにできるだけ早くトレース・メッセージを送信することが重要です。TraceListenerには、ビューアからのネットワーク接続を受け入れることができます。トレース・リスナーがトレース・メッセージを処理するたびに、ネットワークに書き込むことになります。リモートマシン上でトレースメッセージを見ることができないのであれば、もちろんOutputDebugStringに置かれたものを聞くこともオプションです。
これは、トレースを行うアプリケーションのパフォーマンスに影響を与えます。したがって、ネットワークへの書き込みは、トレース書き込みコールをブロックせずに非同期で行うのが最適です。ネットワークへの書き込み中は、処理するためにトレースメッセージをキューに追加する必要があります。
public class NetworkPublishingTraceListener : TraceListener {
private List<string> messages = new List<string>();
private AutoResetEvent messagesAvailable = new AutoResetEvent(false);
private List<TcpClient> traceViewerApps;
private object messageQueueLock = new object();
public NetworkPublishingTraceListener(int port) {
// Setup code for accepting and dealing with network connections.
(new Thread(BackgroundThread) { IsBackground = true }).Start();
}
public override void Write(string message) {
if (traceViewerApps.Count == 0) {
return;
}
lock (messageQueueLock) {
messages.Add(message);
}
messagesAvailable.Set();
}
public override void WriteLine(string message) {
Write(message + Environment.NewLine);
}
private void BackgroundThread() {
while (true) {
messagesAvailable.WaitOne();
List<string> messagesToWrite;
lock (messageQueueLock) {
messagesToWrite = messages;
messages = new List<string>();
}
traceViewerApps.ForEach(viewerApp => {
StreamWriter writer = new StreamWriter(viewerApp.GetStream());
messagesToWrite.ForEach(message => writer.Write(message));
});
}
}
}
これを自分で開発する必要がありますか、またはこれに既存のツールを使用することは許可されていますか? –
私は自分自身の理解のためにこれを独立して開発する必要があります。 –