기본 추적 수신기는 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));
});
}
}
}
직접 개발해야합니까, 아니면 이것을 위해 기존 도구를 사용할 수 있습니까? –
나는 내 자신의 이해를 위해 이것을 독립적으로 개발할 필요가있다. –