在 Visual Basic 中使用應用程式記錄檔
更新:2007 年 11 月
My.Applicaton.Log 與 My.Log 物件能讓將記錄與追蹤資料寫入記錄檔的作業變得更容易。
記錄訊息的方式
首先,利用記錄檔的 TraceSource 屬性 (Property) 的 Switch 屬性,檢查訊息的嚴重性。根據預設,只會將嚴重性為 "Information" 及更高層級的訊息傳送至追蹤接聽程式,而此追蹤接聽程式是在記錄的 TraceListener 集合中所指定。然後,每一個接聽程式都會將訊息的嚴重性與接聽程式的 Switch 屬性加以比較。如果訊息的嚴重性夠高,接聽程式便會寫出訊息。
下列圖表會顯示寫入 WriteEntry 方法的訊息如何傳遞至記錄檔之追蹤接聽程式的 WriteLine 方法:
您可以變更應用程式的組態檔,藉以變更記錄檔與追蹤接聽程式的行為。下列圖表會顯示記錄檔與組態檔之間的相似處。
記錄訊息的位置
如果組件沒有組態檔,則 My.Application.Log 和 My.Log 物件會寫入應用程式的偵錯輸出 (透過 DefaultTraceListener 類別)。此外,My.Application.Log 物件會寫入組件的記錄檔 (透過 FileLogTraceListener 類別),而 My.Log 物件則會寫入 ASP.NET Web 網頁的輸出 (透過 WebPageTraceListener 類別)。
在偵錯模式下執行應用程式時,可以在 Visual Studio [輸出] 視窗中檢視偵錯輸出。若要開啟 [輸出] 視窗,請按一下 [偵錯] 功能表項目、指向 [視窗],再按一下 [輸出]。在 [輸出] 視窗中,從 [顯示輸出來源] 方塊中選取 [偵錯]。
根據預設,My.Application.Log 會將記錄檔寫入到使用者的 Application Data 路徑中。您可以從 DefaultFileLogWriter 屬性 (My.Application.Log 和 My.Log) 的 FullLogFileName 屬性取得路徑。該路徑的格式如下:
BasePath\CompanyName\ProductName\ProductVersion
典型的 BasePath 值如下。
C:\Documents and Settings\username\Application Data
CompanyName、ProductName 和 ProductVersion 的值會來自應用程式的組件資訊。記錄檔名稱的形式為 AssemblyName.log,其中 AssemblyName 是組件的檔案名稱 (不含副檔名)。如果需要有一個以上的記錄檔 (例如,當應用程式嘗試寫入記錄檔卻無法使用原始記錄檔時,可能就有需要),則記錄檔名稱的形式為 AssemblyName-iteration.log,其中 iteration 是正的 Integer。
您可以加入或變更電腦和應用程式的組態檔,以便覆寫預設行為。如需詳細資訊,請參閱逐步解說:變更 My.Application.Log 寫入資訊的位置。
設定記錄檔設定
Log 物件的預設實作 (Implementation) 不需要應用程式組態檔 app.config 就可以運作。若要變更預設值,您必須加入具有新設定的組態檔。如需詳細資訊,請參閱逐步解說:篩選 My.Application.Log 輸出。
記錄檔組態區段位於 app.config 檔案之主要 <configuration> 節點的 <system.diagnostics> 節點中。記錄檔資訊會定義於數個節點中:
Log 物件的接聽程式會定義在名為 DefaultSource 的 <sources> 節點中。
Log 物件的嚴重性篩選條件會定義在名為 DefaultSwitch 的 <switches> 節點中。
記錄檔接聽程式會定義在 <sharedListeners> 節點中。
<sources>、<switches> 和 <sharedListeners> 節點的範例會顯示於下列程式碼中:
<configuration>
<system.diagnostics>
<sources>
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="FileLog"/>
</listeners>
</source>
</sources>
<switches>
<add name="DefaultSwitch" value="Information" />
</switches>
<sharedListeners>
<add name="FileLog"
type="Microsoft.VisualBasic.Logging.FileLogTraceListener,
Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
initializeData="FileLogWriter"
/>
</sharedListeners>
</system.diagnostics>
</configuration>
部署後變更記錄檔設定
當您開發應用程式時,它的組態設定會儲存在 app.config 檔案中,如上述範例所示。部署應用程式後,您仍然可以編輯組態檔,藉以設定記錄檔。在 Windows 架構的應用程式中,此檔案的名稱為 applicationName.exe.config,而且必須位於與可執行檔相同的資料夾中。若為 Web 應用程式,則是與專案相關聯的 Web.config 檔案。
當應用程式第一次執行建立類別執行個體的程式碼時,會檢查組態檔是否有關於物件的資訊。若為 Log 物件,這會在第一次存取 Log 物件時發生。系統只會檢查一次組態檔是否有任何特定物件,也就是在應用程式第一次建立物件時。因此,您需要重新啟動應用程式,才能讓變更生效。
在部署的應用程式中,若要啟用追蹤程式碼,可以在應用程式啟動前重新設定參數物件。通常,這需要開啟與關閉參數物件,或變更追蹤層級,然後重新啟動應用程式。
安全性考量
將資料寫入記錄檔時,請考量下列事項:
避免遺漏使用者資訊:確定應用程式只會將核准的資訊寫入記錄檔。例如,可以接受應用程式記錄檔包含使用者名稱,但不能包含使用者密碼。
確保記錄檔位置的安全:可能會包含機密資訊的任何一個記錄檔都應該儲存於安全的位置。
避免使人產生誤解的資訊:一般而言,應用程式應該先驗證使用者輸入的所有資料,才能使用該資料。這包括將資料寫入應用程式記錄檔。
避免服務拒絕:如果應用程式會將過多的資訊寫入記錄檔,則該記錄檔可能會填滿,或是使尋找重要資訊的工作變得很困難。