共用方式為


在 Visual Basic 中使用應用程式記錄檔

My.Applicaton.Log 與 My.Log 物件能讓將記錄與追蹤資料寫入記錄檔的作業變得更容易。

記錄訊息的方式

首先,利用記錄檔 TraceSource 屬性的 Switch 屬性,檢查訊息的嚴重性。 根據預設,只會將嚴重性為 "Information" 及更高層級的訊息傳送至追蹤接聽程式,而此追蹤接聽程式是在記錄的 TraceListener 集合中所指定。 然後,每一個接聽程式都會將訊息的嚴重性與接聽程式的 Switch 屬性加以比較。 如果訊息的嚴重性夠高,接聽程式便會寫出訊息。

下列圖表會顯示寫入 WriteEntry 方法的訊息如何傳遞至記錄檔之追蹤接聽程式的 WriteLine 方法:

My 記錄檔呼叫

您可以變更應用程式的組態檔,藉以變更記錄檔與追蹤接聽程式的行為。 下列圖表會顯示記錄檔與組態檔之間的相似處。

My 記錄檔組態

記錄訊息的位置

如果組件沒有組態檔,則 My.Application.Log 和 My.Log 物件會寫入應用程式的偵錯輸出 (透過 DefaultTraceListener 類別)。 此外,My.Application.Log 物件會寫入組件的記錄檔 (透過 FileLogTraceListener 類別),而 My.Log 物件則會寫入 ASP.NET Web 網頁的輸出 (透過 WebPageTraceListener 類別)。

在偵錯模式下執行應用程式時,可以在 Visual Studio [輸出] 視窗中檢視偵錯輸出。 若要開啟 [輸出] 視窗,請按一下 [偵錯] 功能表項目、指向 [視窗],再按一下 [輸出]。 在 [輸出] 視窗中,從 [顯示輸出來源] 方塊中選取 [偵錯]。

根據預設,My.Application.Log 會將記錄檔寫入到使用者的 Application Data 路徑中。 您可以從 DefaultFileLogWriter 物件的 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 寫入資訊的位置 (Visual Basic)

設定記錄檔設定

Log 物件擁有不需要應用程式組態檔 app.config 的預設實作。 若要變更預設值,您必須加入具有新設定的組態檔。 如需詳細資訊,請參閱逐步解說:篩選 My.Application.Log 輸出 (Visual Basic)

記錄檔組態區段位於 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,而且必須位於與可執行檔相同的資料夾中。 若為 Web 應用程式,則是與專案相關聯的 Web.config 檔案。

當應用程式第一次執行建立類別執行個體的程式碼時,會檢查組態檔是否有關於物件的資訊。 若為 Log 物件,這會在第一次存取 Log 物件時發生。 系統只會檢查一次組態檔是否有任何特定物件,也就是在應用程式第一次建立物件時。 因此,您需要重新啟動應用程式,才能讓變更生效。

在部署的應用程式中,若要啟用追蹤程式碼,可以在應用程式啟動前重新設定參數物件。 通常,這需要開啟與關閉參數物件,或變更追蹤層級,然後重新啟動應用程式。

安全性考量

將資料寫入記錄檔時,請考量下列事項:

  • 避免遺漏使用者資訊 :確定應用程式只會將核准的資訊寫入記錄檔。 例如,可以接受應用程式記錄檔包含使用者名稱,但不能包含使用者密碼。

  • 確保記錄檔位置的安全 :可能會包含機密資訊的任何一個記錄檔都應該儲存於安全的位置。

  • 避免使人產生誤解的資訊 :一般而言,應用程式應該先驗證使用者輸入的所有資料,才能使用該資料。 這包括將資料寫入應用程式記錄檔。

  • 避免服務拒絕 :如果應用程式會將過多的資訊寫入記錄檔,則該記錄檔可能會填滿,或是使尋找重要資訊的工作變得很困難。

請參閱

參考

Log

概念

記錄來自應用程式的資訊 (Visual Basic)