2013-07-11 24 views
9

我使用TraceSource類登錄我的.NET項目。我應該如何識別TraceSource.TraceEvent方法中的id參數?

但是,從來沒有清楚的一點是,TraceEvent方法中參數id的意圖是什麼。目前,我總是將它設置爲0.

但是它的預期或典型的有用用法是什麼?

我能想到的幾種可能性:

  • 它是事件的發生的ID(即,相同的代碼行產生在每次執行時不同的ID);
  • 它是方法調用的ID(即,您可以從ID中推斷出該行的代碼);
  • 這是一個類似事件家族的ID(例如,所有錯誤消息表明數據庫不存在共享相同的ID);
  • 它是與邏輯運算相關的一組事件的ID,與TraceEventType.(Start|Stop|Suspend|Resume|Transfer)枚舉值相結合;

回答

6

我問過自己同樣的問題,我沒有在任何Microsoft文檔中找到任何說明。 我找到的是一篇由Microsoft MVP撰寫的文章,Richard Grimes: "The id parameter is whatever you choose it to be, there is no compulsion that a particular ID is associated with a particular format message." 在所有示例中,他使用0作爲id參數。

在MSDN文章中,我已經看到它隨機使用,沒有提供任何額外的信息。 我相信,只要您維護相同的代碼約定,您可以以任何方式使用,幫助您在閱讀日誌時獲得最佳效果。如果您想使用接受id參數的SourceFilter.ShouldTrace方法,在跟蹤過濾中後面可能會證明有用。

我用它來描述錯誤類型,如果我有一個錯誤,或者用0代替其他東西。

+0

我相信(沒有證據),當你第一個'TraceEvent()'有一個id,並且跟在同一個id的'TraceData()'後面時,監聽器能夠將數據與事件鏈接起來?例子:首先'TraceEvent()'是一個異常,緊接着'TraceData()'堆棧跟蹤。 – WiSeeker

4

據我在文檔中看到的,它並非專門用於一個目的。我認爲這有助於你配合自己的邏輯來追蹤事件。 SourceFilter上的ShouldTrace()方法採用匹配的id參數,因此您還可以使用它來確定哪些事件或事件類型將放在哪裏。我個人使用TraceSource(這個數據不多,最近才發現),我用它來跟蹤事件類型或類別。在一個應用程序中,我已經有了一個事件類型的枚舉,我正在使用另一個日誌記錄方法,其值爲Debug,Info,Warn,Error,致命,所以我將其轉換爲int並將其用作id,後者幫助過濾所以我可以篩選出我感興趣的級別以下的任何東西以便消除跟蹤。數據訪問= 1,用戶帳戶= 2,產品邏輯= 3,通知= 4,UI = 5等。另外,您可以使用不同的值關聯應用程序的不同部分然後可以使用它來將跟蹤過濾爲僅限於您正在查看的類型。或者,你可以(如你所建議的)使用不同的id值來表示不同的事件類型,所以你可以像使用錯誤代碼一樣使用它們,例如,任何時候當你看到一個id的26時,你都會知道數據庫連接無法建立,或者其他什麼。

這並不特別重要,你用的什麼id參數,只要:

  • 是非常有用的,你在建設和調試程序
  • 這是明確的,可以理解的程序員閱讀通過您的代碼
  • 它一貫整個程序中使用

一種可能性是,你可以有一個集中的類人使事件id s老化,並根據某種輸入提供值,以確保整個應用程序對同一事物使用相同的id