逐步解說:建立自訂的記錄檔接聽程式 (Visual Basic)
本逐步解說示範如何建立自訂記錄檔接聽程式,並將它設定為接聽 My.Application.Log
物件的輸出。
快速入門
記錄檔接聽程式必須繼承自 TraceListener 類別。
若要建立接聽程式
在應用程式中,建立一個繼承自 TraceListener,且命名為
SimpleListener
的類別。Public Class SimpleListener Inherits System.Diagnostics.TraceListener <Security.Permissions.HostProtection(Synchronization:=True)> Public Overloads Overrides Sub Write(ByVal message As String) MsgBox("Write: " & message) End Sub <Security.Permissions.HostProtection(Synchronization:=True)> Public Overloads Overrides Sub WriteLine(ByVal message As String) MsgBox("WriteLine: " & message) End Sub End Class
基底類別所需的 Write 和 WriteLine 方法會呼叫
MsgBox
來顯示其輸入。HostProtectionAttribute 屬性會套用至 Write 和 WriteLine 方法,使其屬性符合基底類別方法。 HostProtectionAttribute 屬性可讓執行程式碼的主機決定讓程式碼公開主機保護同步處理。
注意
HostProtectionAttribute 屬性只適用於裝載通用語言執行平台以及實作主機保護的 Unmanaged 應用程式,例如 SQL Server。
為了確保 My.Application.Log
使用記錄檔接聽程式,您應該建立強式名稱的組件以包含記錄檔接聽程式。
下一個程序提供一些簡單的步驟,以建立強式名稱的記錄檔接聽程式組件。 如需詳細資訊,請參閱建立和使用強式名稱的組件。
若要建立強式名稱的記錄檔接聽程式組件
在 方案總管中選取專案。 在 [ 專案 ] 功能表上,選擇 [ 屬性]。
按一下 [ 簽署 ] 索引標籤。
選取 [簽署組件] 方塊。
在 [選擇強式名稱金鑰檔] 下拉式清單中,選取 [<New>]。
隨即開啟 [建立強式名稱金鑰]對話方塊。
在 [金鑰檔案名稱]方塊中,提供金鑰檔名稱。
將密碼輸入 [輸入密碼] 和 [確認密碼] 方塊。
按一下 [確定]。
重建應用程式。
新增接聽程式
現在,組件已具有強式名稱,您必須決定接聽程式的強式名稱,以讓 My.Application.Log
使用您的記錄檔接聽程式。
具備強式名稱的類型格式如下:
<type name>、<assembly name>、<version number>、<culture>、<strong name>
若要決定接聽程式的強式名稱
下列程式碼示範如何決定以強式名稱命名
SimpleListener
的類型名稱。Public Sub DisplaySimpleListenerStrongName() Dim t As Type = GetType(SimpleListener) MsgBox(t.FullName & ", " & t.Assembly.FullName) End Sub
強式名稱的類型取決於您的專案而定。
使用強式名稱時,您可以將接聽程式新增至 My.Application.Log
記錄檔接聽程式集合。
若要將接聽程式新增至 My.Application.Log
在方案總管中,以滑鼠右鍵按一下 app.config,並選擇 [開啟]。
-或-
如果已有 app.config 檔案︰
在 [ 專案 ] 功能表中,選擇 [ 加入新項目]。
在 [加入新項目] 對話方塊中,選擇 [應用程式組態檔] 。
按一下新增。
在
<listeners>
區段下,具有<source>
屬性 "DefaultSource" 的name
區段中找出<sources>
區段。<sources>
區段位於最上層<system.diagnostics>
區段中的<configuration>
區段內。將此項目新增至
<listeners>
區段:<add name="SimpleLog" />
找出位於最上層
<sharedListeners>
區段中<system.diagnostics>
區段的<configuration>
區段。將此項目加入至該
<sharedListeners>
區段︰<add name="SimpleLog" type="SimpleLogStrongName" />
將
SimpleLogStrongName
的值變更為接聽程式的強式名稱。