EventLog 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供與 Windows 事件記錄檔的互動。
public ref class EventLog : System::ComponentModel::Component, System::ComponentModel::ISupportInitialize
public class EventLog : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
type EventLog = class
inherit Component
interface ISupportInitialize
Public Class EventLog
Inherits Component
Implements ISupportInitialize
- 繼承
- 實作
範例
下列範例會在事件來源不存在時建立事件來源 MySource
,並將專案寫入事件記錄檔 MyNewLog
中。
注意
從 Windows Vista 開始,您必須以系統管理員身分執行此應用程式。
#using <System.dll>
using namespace System;
using namespace System::Diagnostics;
using namespace System::Threading;
int main()
{
// Create the source, if it does not already exist.
if ( !EventLog::SourceExists( "MySource" ) )
{
//An event log source should not be created and immediately used.
//There is a latency time to enable the source, it should be created
//prior to executing the application that uses the source.
//Execute this sample a second time to use the new source.
EventLog::CreateEventSource( "MySource", "MyNewLog" );
Console::WriteLine( "CreatingEventSource" );
// The source is created. Exit the application to allow it to be registered.
return 0;
}
// Create an EventLog instance and assign its source.
EventLog^ myLog = gcnew EventLog;
myLog->Source = "MySource";
// Write an informational entry to the event log.
myLog->WriteEntry( "Writing to event log." );
}
using System;
using System.Diagnostics;
using System.Threading;
class MySample{
public static void Main(){
// Create the source, if it does not already exist.
if(!EventLog.SourceExists("MySource"))
{
//An event log source should not be created and immediately used.
//There is a latency time to enable the source, it should be created
//prior to executing the application that uses the source.
//Execute this sample a second time to use the new source.
EventLog.CreateEventSource("MySource", "MyNewLog");
Console.WriteLine("CreatedEventSource");
Console.WriteLine("Exiting, execute the application a second time to use the source.");
// The source is created. Exit the application to allow it to be registered.
return;
}
// Create an EventLog instance and assign its source.
EventLog myLog = new EventLog();
myLog.Source = "MySource";
// Write an informational entry to the event log.
myLog.WriteEntry("Writing to event log.");
}
}
Option Explicit
Option Strict
Imports System.Diagnostics
Imports System.Threading
Class MySample
Public Shared Sub Main()
If Not EventLog.SourceExists("MySource") Then
' Create the source, if it does not already exist.
' An event log source should not be created and immediately used.
' There is a latency time to enable the source, it should be created
' prior to executing the application that uses the source.
' Execute this sample a second time to use the new source.
EventLog.CreateEventSource("MySource", "MyNewLog")
Console.WriteLine("CreatingEventSource")
'The source is created. Exit the application to allow it to be registered.
Return
End If
' Create an EventLog instance and assign its source.
Dim myLog As New EventLog()
myLog.Source = "MySource"
' Write an informational entry to the event log.
myLog.WriteEntry("Writing to event log.")
End Sub
End Class
備註
EventLog 可讓您存取或自定義 Windows 事件記錄檔,以記錄重要軟體或硬體事件的相關信息。 您可以使用 EventLog,從現有的記錄讀取、將專案寫入記錄、建立或刪除事件來源、刪除記錄檔,以及響應記錄專案。 您也可以在建立事件來源時建立新的記錄。
重要
此型別代表 IDisposable 介面。 當您完成使用型別時,您應該直接或間接處置它。 若要直接處置型別,請呼叫其 try
/catch
區塊中的 Dispose 方法。 若要間接處置它,請使用語言建構函式,例如 using
(在 C# 中) 或 Using
(在 Visual Basic 中)。 如需詳細資訊,請參閱 IDisposable 介面文章中的<使用實作 IDisposable 的物件>一節。
除了提供個別事件記錄檔及其專案的存取權之外,類別 EventLog 還可讓您存取所有事件記錄檔的集合。 您可以使用 static
的成員 EventLog 來刪除記錄、取得記錄清單、建立或刪除來源,或判斷計算機是否已經包含特定來源。
默認事件記錄檔有三種:應用程式、系統和安全性。 安全性記錄檔是唯讀的。 您安裝的其他應用程式和服務,例如 Active Directory,可能會有額外的事件記錄檔。
使用 EventLog 類別時有安全性考慮。 EventLogEventLogPermission需要 .NET Framework 2.0 和更新版本中特定動作的許可權,或 .NET Framework 1.0 和 1.1 中的完整信任。 建議您 EventLogPermission 不要授與部分信任的程序代碼。 您絕對不應該將任何事件記錄檔物件,包括 EventLogEntryCollection 和 EventLogEntry 對象傳遞至較不受信任的程式代碼。 例如,建立 EventLog 物件、撰寫專案,然後將對象傳遞 EventLog 至部分信任的程式代碼可以建立安全性問題,因為讀取和寫入事件記錄檔的能力可讓程式代碼執行動作,例如在另一個應用程式的名稱中發出事件記錄檔訊息。
從 Windows Vista 開始,用戶帳戶控制 (UAC) 決定使用者的認證。 如果您是內建 Administrators 群組的成員,系統會將兩個執行階段存取語彙基元 (Token) 指派給您:標準使用者存取語彙基元及管理員存取語彙基元。 根據預設,您會屬於標準使用者角色。 若要執行存取安全性記錄的程式代碼,您必須先將認證從標準使用者提升為系統管理員。 當您使用滑鼠時,您可以開啟應用程式的快捷方式功能表 (,以滑鼠右鍵按兩下應用程式圖示) ,並指出您想要以系統管理員身分執行。
您可以使用 EventLog 來建立可透過伺服器 事件檢視器 檢視的自定義事件記錄檔。 RegisterDisplayName使用 方法,在 事件檢視器 中顯示事件記錄檔的當地語系化名稱。 ModifyOverflowPolicy使用方法來設定事件記錄檔達到記錄大小上限時的行為。
若要從事件記錄檔讀取,請指定記錄檔名稱 (Log 屬性) 和伺服器計算機名稱 (MachineName 事件記錄檔的屬性。 如果您未指定伺服器計算機名稱,則會假設本機計算機 “.”。 不需要指定事件來源 (屬性) Source ,因為只有寫入記錄時才需要來源。 屬性 Entries 會自動填入事件記錄檔的項目清單。
若要寫入事件記錄檔,請指定或建立事件來源 (Source 屬性) 。 您必須在計算機上擁有系統管理認證,才能建立新的事件來源。 事件來源會將您的應用程式註冊為有效的專案來源事件記錄檔。 您可以使用事件來源一次只寫入一個記錄檔。 屬性 Source 可以是任何隨機字串,但名稱必須與計算機上的其他來源不同。 事件來源通常是應用程式的名稱或其他識別字串。 嘗試建立重複 Source 的值會擲回例外狀況。 不過,單一事件記錄檔可以與多個來源相關聯。
如果與實例相關聯的 EventLog 事件記錄檔事件來源不存在,則會建立新的事件來源。 若要在 Windows Vista 和更新版本或 Windows Server 2003 中建立事件來源,您必須具有系統管理認證。
這項需求是因為必須搜尋所有事件記錄檔,包括安全性記錄,才能判斷事件來源是否是唯一的。 從 Windows Vista 開始,用戶沒有存取安全性記錄的許可權;因此, SecurityException 會擲回 。
重要
建立或刪除事件來源需要使用具名 Mutex 同步處理基礎程序代碼。 如果高度特殊許可權的應用程式鎖定具名 Mutex,嘗試建立或刪除事件來源會導致應用程式停止回應,直到鎖定釋放為止。 若要協助避免這個問題,請絕對不要將許可權授 UnmanagedCode 與不受信任的程序代碼。 此外, UnmanagedCode 許可權可能會允許略過其他許可權,而且應該只授與高度信任的程序代碼。
應用程式和服務應該寫入應用程式記錄檔或自定義記錄檔。 設備驅動器應該寫入系統記錄檔。 如果您未明確設定 Log 屬性,事件記錄檔會預設為應用程式記錄檔。
注意
沒有任何項目可保護應用程式以任何已註冊的來源形式寫入。 如果應用程式被授與 Write 許可權,它可以為計算機上註冊的任何有效來源寫入事件。
WriteEvent使用 和 WriteEntry 方法,將事件寫入事件記錄檔。 您必須指定事件來源來寫入事件;您必須先建立並設定事件來源,才能使用來源撰寫第一個專案。
在安裝應用程式期間 Create 新的事件來源。 這可讓操作系統重新整理其已註冊事件來源及其設定的清單。 如果操作系統尚未重新整理其事件來源清單,而且您嘗試使用新來源寫入事件,則寫入作業將會失敗。 您可以使用物件或 CreateEventSource 方法來設定新的來源EventLogInstaller。 您必須在計算機上擁有系統管理認證,才能建立新的事件來源。
每個來源一次只能寫入一個事件記錄檔;不過,您的應用程式可以使用多個來源來寫入多個事件記錄檔。 例如,您的應用程式可能需要針對不同的事件記錄檔或不同的資源檔案設定多個來源。 若要變更現有來源的組態詳細數據,您必須刪除來源,然後使用新的組態加以建立。 如果其他應用程式或元件使用現有的來源,請使用更新的組態建立新的來源,而不是刪除現有的來源。
您可以使用事件類別目錄和訊息字串的當地語系化資源註冊事件來源。 您的應用程式可以使用資源識別碼來寫入事件記錄專案,而不是指定實際的字串值。 如需使用資源檔設定來源的詳細資訊, EventLogInstaller 請參閱 和 EventSourceCreationData 類別。
如果您的應用程式直接將字串值寫入事件記錄檔,您就不需要設定來源的資源檔案屬性。 來源必須設定為撰寫本地化專案,或撰寫直接字串。 如果您的應用程式同時使用資源識別碼和字串值來寫入專案,您必須註冊兩個不同的來源。 例如,使用資源文件設定一個來源,然後在方法中使用 WriteEvent 該來源,使用資源標識符將專案寫入事件記錄檔。 然後建立不含資源檔的不同來源,並在方法中使用 WriteEntry 該來源直接將字串寫入事件記錄檔。
寫入事件時,您至少必須指定訊息字串或訊息字串的資源識別碼。 其他事件屬性是選擇性的。 選擇性事件設定的範例包括:
您可以設定 EventLogEntryType 指定項目 事件檢視器 顯示的圖示。
如果您的應用程式使用類別來篩選事件,您可以指定事件的類別識別碼。
如果您想要將其他資訊與指定的事件產生關聯,您可以將二進位資料附加至事件專案。
重要
事件記錄會耗用磁碟空間、處理器時間和其他系統資源。 請務必只記錄基本資訊。 建議您在錯誤路徑中放置事件記錄檔呼叫,而不是在主要程式代碼路徑中,因此它們不會對效能造成負面影響。
如需 實例 EventLog的初始屬性值清單,請參閱 建 EventLog 構函式。
建構函式
EventLog() |
初始化 EventLog 類別的新執行個體。 不讓執行個體和任何記錄檔產生關聯。 |
EventLog(String) |
初始化 EventLog 類別的新執行個體。 讓執行個體與本機電腦上的記錄檔產生關聯。 |
EventLog(String, String) |
初始化 EventLog 類別的新執行個體。 讓執行個體與指定電腦上的記錄檔產生關聯。 |
EventLog(String, String, String) |
初始化 EventLog 類別的新執行個體。 讓執行個體和指定電腦上的記錄檔產生關聯,並建立或指派指定的來源給 EventLog。 |
屬性
CanRaiseEvents |
取得值,指出元件是否能引發事件。 (繼承來源 Component) |
Container |
取得包含 IContainer 的 Component。 (繼承來源 Component) |
DesignMode |
取得值,指出 Component 目前是否處於設計模式。 (繼承來源 Component) |
EnableRaisingEvents |
取得或設定值,表示 EventLog 是否接收 EntryWritten 事件通知。 |
Entries |
取得事件記錄檔的內容。 |
Events |
取得附加在這個 Component 上的事件處理常式清單。 (繼承來源 Component) |
Log |
取得或設定要讀取或寫入的事件記錄檔的名稱。 |
LogDisplayName |
取得事件記錄檔的易記名稱。 |
MachineName |
取得或設定要在其上讀取或寫入事件的電腦的名稱。 |
MaximumKilobytes |
取得或設定最大事件記錄檔大小 (以 KB 為單位)。 |
MinimumRetentionDays |
取得事件記錄檔項目的保留天數。 |
OverflowAction |
當事件記錄檔到達最大記錄檔大小時,取得儲存新項目的已設定行為。 |
Site | (繼承來源 Component) |
Source |
取得或設定寫入至事件記錄檔時登錄和使用的來源名稱。 |
SynchronizingObject |
取得或設定物件,其用於封送處理 (Marshal) 因為 EventLog 項目寫入事件而發出的事件處理常式呼叫。 |
方法
BeginInit() |
開始初始化表單或為另一個元件所使用的 EventLog。 初始化會於執行階段時執行。 |
Clear() |
移除事件記錄檔的所有項目。 |
Close() |
關閉事件記錄檔,並釋放讀取和寫入控制代碼。 |
CreateEventSource(EventSourceCreationData) |
使用事件來源及對應的事件記錄檔指定的組態屬性,建立有效的事件來源,以撰寫當地語系化的事件訊息。 |
CreateEventSource(String, String) |
建立指定的來源名稱做為有效的事件來源,以便將項目寫入本機電腦上的記錄檔。 這個方法也可以在本機電腦上建立新的自訂記錄檔。 |
CreateEventSource(String, String, String) |
已淘汰.
已淘汰.
已淘汰.
建立指定的來源名稱做為有效的事件來源,以便將項目寫入指定之電腦上的記錄檔。 這個方法也可以用來在指定的電腦上建立新的自訂記錄檔。 |
CreateObjRef(Type) |
建立包含所有相關資訊的物件,這些資訊是產生用來與遠端物件通訊的所需 Proxy。 (繼承來源 MarshalByRefObject) |
Delete(String) |
將事件記錄檔從本機電腦移除。 |
Delete(String, String) |
將事件記錄檔從指定的電腦移除。 |
DeleteEventSource(String) |
將事件來源登錄從本機電腦的事件記錄檔移除。 |
DeleteEventSource(String, String) |
將應用程式的事件來源登錄從指定的電腦移除。 |
Dispose() |
釋放 Component 所使用的所有資源。 (繼承來源 Component) |
Dispose(Boolean) |
釋放 EventLog 所使用的 Unmanaged 資源,並選擇性釋放 Managed 資源。 |
EndInit() |
結束對表單或為另一個元件所使用之 EventLog 的初始化。 初始化會於執行階段時執行。 |
Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
Exists(String) |
判斷記錄檔是否存在於本機電腦上。 |
Exists(String, String) |
判斷記錄檔是否存在於指定的電腦上。 |
GetEventLogs() |
搜尋本機電腦上的所有事件記錄檔,並建立含有清單的 EventLog 物件陣列。 |
GetEventLogs(String) |
搜尋指定電腦上的所有事件記錄檔,並建立含有清單的 EventLog 物件陣列。 |
GetHashCode() |
做為預設雜湊函式。 (繼承來源 Object) |
GetLifetimeService() |
已淘汰.
擷取控制這個執行個體存留期 (Lifetime) 原則的目前存留期服務物件。 (繼承來源 MarshalByRefObject) |
GetService(Type) |
傳回表示 Component 或其 Container 所提供之服務的物件。 (繼承來源 Component) |
GetType() |
取得目前執行個體的 Type。 (繼承來源 Object) |
InitializeLifetimeService() |
已淘汰.
取得存留期服務物件,以控制這個執行個體的存留期原則。 (繼承來源 MarshalByRefObject) |
LogNameFromSourceName(String, String) |
取得登錄指定來源的記錄檔的名稱。 |
MemberwiseClone() |
建立目前 Object 的淺層複製。 (繼承來源 Object) |
MemberwiseClone(Boolean) |
建立目前 MarshalByRefObject 物件的淺層複本。 (繼承來源 MarshalByRefObject) |
ModifyOverflowPolicy(OverflowAction, Int32) |
當事件記錄檔到達最大檔案大小時,變更寫入新項目的已設定行為。 |
RegisterDisplayName(String, Int64) |
指定事件記錄檔的當地語系化名稱,這會顯示在伺服器的 [事件檢視器] 中。 |
SourceExists(String) |
判斷事件來源是否登錄於本機電腦上。 |
SourceExists(String, String) |
判斷事件來源是否登錄於指定的電腦上。 |
ToString() |
傳回任何包含 Component 名稱的 String。 不應覆寫此方法。 (繼承來源 Component) |
WriteEntry(String) |
將具有指定訊息文字的資訊類型項目寫入事件記錄檔。 |
WriteEntry(String, EventLogEntryType) |
將具有指定訊息文字的錯誤、警告、資訊、成功稽核或失敗稽核項目寫入事件記錄檔。 |
WriteEntry(String, EventLogEntryType, Int32) |
將有指定訊息文字和應用程式定義的事件識別項的項目寫入事件記錄檔。 |
WriteEntry(String, EventLogEntryType, Int32, Int16) |
將具有指定訊息文字、應用程式定義的事件識別項和應用程式定義的分類的項目寫入事件記錄檔。 |
WriteEntry(String, EventLogEntryType, Int32, Int16, Byte[]) |
將有指定訊息文字、應用程式定義的事件識別項和應用程式定義的分類的項目寫入事件記錄檔,並將二進位資料附加到訊息。 |
WriteEntry(String, String) |
使用指定的登錄事件來源,將具有指定訊息文字的資訊類型項目寫入事件記錄檔。 |
WriteEntry(String, String, EventLogEntryType) |
用指定的登錄事件來源,將有指定訊息文字的錯誤、警告、資訊、成功稽核或失敗稽核項目寫入事件記錄檔。 |
WriteEntry(String, String, EventLogEntryType, Int32) |
使用指定的登錄事件來源,將有指定訊息文字和應用程式定義的事件識別項的項目寫入事件記錄檔。 |
WriteEntry(String, String, EventLogEntryType, Int32, Int16) |
使用指定的登錄事件來源,將有指定訊息文字、應用程式定義的事件識別項和應用程式定義的分類的項目寫入事件記錄檔。 |
WriteEntry(String, String, EventLogEntryType, Int32, Int16, Byte[]) |
將有指定訊息文字、應用程式定義的事件識別項和應用程式定義的分類的項目寫入事件記錄檔 (使用指定的登錄事件來源),並將二進位資料附加到訊息。 |
WriteEvent(EventInstance, Byte[], Object[]) |
以指定的事件資料、訊息取代字串和相關聯的二進位資料來寫入事件記錄檔項目。 |
WriteEvent(EventInstance, Object[]) |
將當地語系化的項目寫入事件記錄檔。 |
WriteEvent(String, EventInstance, Byte[], Object[]) |
以指定的事件資料、訊息取代字串和相關聯的二進位資料,以及使用指定的已登錄事件來源,寫入事件記錄檔項目。 |
WriteEvent(String, EventInstance, Object[]) |
以指定的事件資料、訊息取代字串,以及使用指定的已登錄事件來源,寫入事件記錄檔項目。 |
事件
Disposed |
當 Dispose() 方法的呼叫處置元件時,就會發生。 (繼承來源 Component) |
EntryWritten |
發生於項目寫入至本機電腦上的事件記錄檔時。 |