2011-01-28 40 views
1

到目前爲止,在我的應用程序中,我將所有跟蹤事件記錄到硬盤上的文件中。自定義TraceListener Windows應用程序

我現在想提高它在監聽

從主要應用的跟蹤(因爲它們產生的)一個單獨的窗口跟蹤應用程序的形式,並在

GridView控件一樣的界面舉報。現在的問題是:

我必須使用什麼樣的TraceListener才能獲得讀取日誌信息速度的最大好處?

限制 由於一定的限制,我不能使用數據庫記錄和讀取方法

威爾聽了應用程序事件日誌時以任何方式幫助嗎?

感謝您的建議和時間。

+0

你需要自己開發一下嗎,還是允許你使用現有的工具? – 2011-01-28 13:42:06

+0

爲了我自己的理解,我需要獨立開發。 – 2011-01-28 14:18:54

回答

3

默認跟蹤監聽器將使用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)); 
      }); 
     } 
    } 
} 
+0

謝謝...我意識到馬克Russinovichs令人驚訝的有用的工具。但我需要爲自己的利益開發一個。 – 2011-01-28 14:19:59

0

你爲什麼不使用log4net的n日誌

相關問題