EventLog 类

定义

提供与 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 不要向部分受信任的代码授予该权限。 切勿将任何事件日志对象(包括 EventLogEntryCollectionEventLogEntry 对象)传递给不太受信任的代码。 例如,创建 EventLog 对象、编写条目,然后将对象传递给 EventLog 部分受信任的代码可能会造成安全问题,因为读取和写入事件日志的能力允许代码执行操作,例如以另一个应用程序的名称发出事件日志消息。

从 Windows Vista 开始,用户帐户控制 (UAC) 确定用户的凭据。 如果您是内置的 Administrators 组的成员,将为您分配两个运行时访问令牌:一个标准用户访问令牌和一个管理员访问令牌。 默认情况下,您拥有标准用户角色。 若要运行访问安全日志的代码,必须先将凭据从标准用户提升为管理员。 启动应用程序时,可以通过打开应用程序的快捷菜单(如果使用鼠标) (执行此操作,右键单击应用程序图标) 并指示要以管理员身份运行。

可以使用 EventLog 创建可以通过服务器的事件查看器查看的自定义事件日志。 RegisterDisplayName使用 方法在事件查看器中显示事件日志的本地化名称。 ModifyOverflowPolicy使用 方法配置事件日志达到最大日志大小时的行为。

若要从事件日志中读取,请指定事件日志的日志名称 (Log 属性) 和服务器计算机名称 (MachineName 属性。 如果未指定服务器计算机名称,则假定为本地计算机“.”。 无需) 指定事件源 (Source 属性,因为只有写入日志时才需要源。 属性 Entries 会自动填充事件日志的条目列表。

若要写入事件日志,请指定或创建事件源 (Source 属性) 。 计算机上必须具有管理凭据才能创建新的事件源。 事件源将应用程序注册到事件日志中,作为有效的条目源。 一次只能使用事件源写入一个日志。 属性 Source 可以是任何随机字符串,但名称必须不同于计算机上的其他源。 事件源通常是应用程序的名称或其他标识字符串。 尝试创建重复 Source 值会引发异常。 但是,单个事件日志可以与多个源相关联。

如果与 EventLog 实例关联的事件日志的事件源不存在,则会创建新的事件源。 若要在 Windows Vista 及更高版本或 Windows Server 2003 中创建事件源,必须具有管理凭据。

此要求是因为必须搜索所有事件日志(包括安全日志)以确定事件源是否唯一。 从 Windows Vista 开始,用户无权访问安全日志;因此, SecurityException 会引发 。

重要

创建或删除事件源需要使用命名互斥体来同步基础代码。 如果高特权应用程序锁定了命名的互斥体,则尝试创建或删除事件源会导致应用程序停止响应,直到释放该锁。 为了帮助防止此问题,切勿向不受信任的代码授予 UnmanagedCode 权限。 此外, UnmanagedCode 权限可能允许绕过其他权限,并且只应授予高度受信任的代码。

应用程序和服务应写入应用程序日志或自定义日志。 设备驱动程序应写入系统日志。 如果未显式设置 Log 属性,则事件日志默认为应用程序日志。

注意

没有任何内容可以保护应用程序不会作为任何已注册的源进行写入。 如果向应用程序授予 Write 权限,它可以为计算机上注册的任何有效源编写事件。

WriteEvent使用 和 WriteEntry 方法将事件写入事件日志。 必须指定事件源才能写入事件;必须先创建并配置事件源,然后才能使用源编写第一个条目。

在应用程序安装期间创建新的事件源。 这允许操作系统有时间刷新其已注册的事件源列表及其配置。 如果操作系统尚未刷新其事件源列表,并且你尝试使用新源编写事件,则写入操作将失败。 可以使用 对象或 CreateEventSource 方法配置新源EventLogInstaller。 计算机上必须具有管理凭据才能创建新的事件源。

每个源一次只能写入一个事件日志;但是,应用程序可以使用多个源写入多个事件日志。 例如,应用程序可能需要为不同的事件日志或不同的资源文件配置多个源。 若要更改现有源的配置详细信息,必须删除源,然后使用新配置创建它。 如果其他应用程序或组件使用现有源,请使用更新的配置创建新的源,而不是删除现有源。

可以使用事件类别和消息字符串的本地化资源注册事件源。 应用程序可以使用资源标识符(而不是指定实际字符串值)编写事件日志条目。 有关使用资源文件配置源的详细信息, EventLogInstaller 请参阅 和 EventSourceCreationData 类。

如果应用程序将字符串值直接写入事件日志,则无需设置源的资源文件属性。 必须将源配置为用于写入本地化条目或编写直接字符串。 如果应用程序使用资源标识符和字符串值写入条目,则必须注册两个单独的源。 例如,使用资源文件配置一个源,然后在 方法中 WriteEvent 使用该源将使用资源标识符的条目写入事件日志。 然后创建不带资源文件的其他源,并在 方法中 WriteEntry 使用该源将字符串直接写入使用该源的事件日志。

编写事件时,必须至少指定消息字符串或消息字符串的资源标识符。 其他事件属性是可选的。 可选事件设置的示例包括:

  • 可以设置 EventLogEntryType 以指定事件查看器为条目显示的图标。

  • 如果应用程序使用类别来筛选事件,则可以为事件指定类别标识符。

  • 如果要将其他信息与给定事件相关联,可以将二进制数据附加到事件条目。

重要

事件日志记录会占用磁盘空间、处理器时间和其他系统资源。 仅记录基本信息非常重要。 建议将事件日志调用置于错误路径中,而不是main代码路径中,以免对性能产生负面影响。

有关 实例 EventLog的初始属性值列表, EventLog 请参阅 构造函数。

构造函数

EventLog()

初始化 EventLog 类的新实例。 不将该实例与任何日志关联。

EventLog(String)

初始化 EventLog 类的新实例。 将该实例与本地计算机上的日志关联。

EventLog(String, String)

初始化 EventLog 类的新实例。 将该实例与指定计算机上的日志关联。

EventLog(String, String, String)

初始化 EventLog 类的新实例。 将实例与指定的计算机上的日志关联,并为 EventLog 实例创建或分配指定的源。

属性

CanRaiseEvents

获取一个指示组件是否可以引发事件的值。

(继承自 Component)
Container

获取包含 IContainerComponent

(继承自 Component)
DesignMode

获取一个值,用以指示 Component 当前是否处于设计模式。

(继承自 Component)
EnableRaisingEvents

获取或设置一个值,用以指示 EventLog 是否接收 EntryWritten 事件通知。

Entries

获取事件日志的内容。

Events

获取附加到此 Component 的事件处理程序的列表。

(继承自 Component)
Log

获取或设置读取或写入的日志名称。

LogDisplayName

获取事件日志的友好名称。

MachineName

获取或设置在其上读取或写入事件的计算机的名称。

MaximumKilobytes

获取或设置最大事件日志大小(以 KB 为单位)。

MinimumRetentionDays

获取要在事件日志中保留项的天数。

OverflowAction

获取已配置的行为,以便在事件日志达到其最大文件大小时存储新项。

Site

获取或设置 ComponentISite

(继承自 Component)
Source

获取或设置在写入事件日志时要注册和使用的源名称。

SynchronizingObject

获取或设置用于封送事件处理程序调用的对象,该调用在有 EventLog 项写入事件时发出。

方法

BeginInit()

开始初始化用于窗体或由其他组件使用的 EventLog。 此初始化在运行时发生。

Clear()

从事件日志中移除所有项。

Close()

关闭事件日志并释放读写句柄。

CreateEventSource(EventSourceCreationData)

通过使用为该事件源和对应的事件日志指定的配置属性,建立一个写入本地化事件消息的有效事件源。

CreateEventSource(String, String)

建立指定的源名称作为向本地计算机上的日志中写入日志项的有效事件源。 此方法还可在本地计算机上创建一个新的自定义日志。

CreateEventSource(String, String, String)
已过时.
已过时.
已过时.

建立指定的源名称作为向指定计算机上的日志中写入项的有效事件源。 此方法还可用于在指定计算机上创建一个新的自定义日志。

CreateObjRef(Type)

创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。

(继承自 MarshalByRefObject)
Delete(String)

从本地计算机上移除事件日志。

Delete(String, String)

从指定计算机上移除事件日志。

DeleteEventSource(String)

从本地计算机的事件日志中移除事件源注册。

DeleteEventSource(String, String)

从指定的计算机上移除应用程序的事件源注册。

Dispose()

释放由 Component 使用的所有资源。

(继承自 Component)
Dispose(Boolean)

释放由 EventLog 占用的非托管资源,还可以另外再释放托管资源。

EndInit()

结束用于窗体或由其他组件使用的 EventLog 的初始化。 此初始化在运行时发生。

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
Exists(String)

确定该日志是否存在于本地计算机上。

Exists(String, String)

确定该日志是否存在于指定计算机上。

GetEventLogs()

在本地计算机上搜索所有的事件日志并创建一个包含该列表的 EventLog 对象数组。

GetEventLogs(String)

在给定计算机上搜索所有事件日志并创建一个包含该列表的 EventLog 对象数组。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetLifetimeService()
已过时.

检索控制此实例的生存期策略的当前生存期服务对象。

(继承自 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)

通过使用指定的注册事件源,将一个具有给定消息文本、应用程序定义的事件标识符和应用程序定义的类别的项写入事件日志。 事件查看器可使用 category 筛选日志中的事件。

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

向本地计算机上的事件日志写入项时发生。

适用于

另请参阅