EventSource Classe

Definição

Oferece a capacidade de criar eventos para ETW (Rastreamento de Eventos para Windows).Provides the ability to create events for event tracing for Windows (ETW).

public ref class EventSource : IDisposable
public class EventSource : IDisposable
type EventSource = class
    interface IDisposable
Public Class EventSource
Implements IDisposable
Herança
EventSource
Derivado
Implementações

Exemplos

O exemplo a seguir mostra uma implementação simples da classe EventSource.The following example shows a simple implementation of the EventSource class.

using System.Diagnostics.Tracing;
using System.Collections.Generic;

namespace Demo1
{
    class MyCompanyEventSource : EventSource
    {
        public static MyCompanyEventSource Log = new MyCompanyEventSource();

        public void Startup() { WriteEvent(1); }
        public void OpenFileStart(string fileName) { WriteEvent(2, fileName); }
        public void OpenFileStop() { WriteEvent(3); }
    }

    class Program
    {
        static void Main(string[] args)
        {
            string name = MyCompanyEventSource.GetName(typeof(MyCompanyEventSource));
            IEnumerable<EventSource> eventSources = MyCompanyEventSource.GetSources();
            MyCompanyEventSource.Log.Startup();
            // ...
            MyCompanyEventSource.Log.OpenFileStart("SomeFile");
            // ...
            MyCompanyEventSource.Log.OpenFileStop();
        }
    }
}
Imports System.Diagnostics.Tracing

Class MyCompanyEventSource
    Inherits EventSource
    Public Shared Log As New MyCompanyEventSource()

    Public Sub Startup()
        WriteEvent(1)
    End Sub

    Public Sub OpenFileStart(ByVal fileName As String)
        WriteEvent(2, fileName)
    End Sub

    Public Sub OpenFileStop()
        WriteEvent(3)
    End Sub
End Class

Class Program

    Shared Sub Main(ByVal args() As String)
        MyCompanyEventSource.Log.Startup()
        ' ...
        MyCompanyEventSource.Log.OpenFileStart("SomeFile")
        ' ...
        MyCompanyEventSource.Log.OpenFileStop()

    End Sub
End Class

O exemplo a seguir mostra uma implementação mais complexa da classe EventSource.The following example shows a more complex implementation of the EventSource class.

using System;
using System.Diagnostics.Tracing;

namespace Demo2
{
    enum MyColor { Red, Yellow, Blue };

    [EventSource(Name = "MyCompany")]
    class MyCompanyEventSource : EventSource
    {
        public class Keywords
        {
            public const EventKeywords Page = (EventKeywords)1;
            public const EventKeywords DataBase = (EventKeywords)2;
            public const EventKeywords Diagnostic = (EventKeywords)4;
            public const EventKeywords Perf = (EventKeywords)8;
        }

        public class Tasks
        {
            public const EventTask Page = (EventTask)1;
            public const EventTask DBQuery = (EventTask)2;
        }

        [Event(1, Message = "Application Failure: {0}", Level = EventLevel.Error, Keywords = Keywords.Diagnostic)]
        public void Failure(string message) { WriteEvent(1, message); }

        [Event(2, Message = "Starting up.", Keywords = Keywords.Perf, Level = EventLevel.Informational)]
        public void Startup() { WriteEvent(2); }

        [Event(3, Message = "loading page {1} activityID={0}", Opcode = EventOpcode.Start, 
            Task = Tasks.Page, Keywords = Keywords.Page, Level = EventLevel.Informational)]
        public void PageStart(int ID, string url) { if (IsEnabled()) WriteEvent(3, ID, url); }

        [Event(4, Opcode = EventOpcode.Stop, Task = Tasks.Page, Keywords = Keywords.Page, Level = EventLevel.Informational)]
        public void PageStop(int ID) { if (IsEnabled()) WriteEvent(4, ID); }

        [Event(5, Opcode = EventOpcode.Start, Task = Tasks.DBQuery, Keywords = Keywords.DataBase, Level = EventLevel.Informational)]
        public void DBQueryStart(string sqlQuery) { WriteEvent(5, sqlQuery); }

        [Event(6, Opcode = EventOpcode.Stop, Task = Tasks.DBQuery, Keywords = Keywords.DataBase, Level = EventLevel.Informational)]
        public void DBQueryStop() { WriteEvent(6); }

        [Event(7, Level = EventLevel.Verbose, Keywords = Keywords.DataBase)]
        public void Mark(int ID) { if (IsEnabled()) WriteEvent(7, ID); }

        [Event(8)]
        public void LogColor(MyColor color) { WriteEvent(8, (int) color); }

        public static MyCompanyEventSource Log = new MyCompanyEventSource();
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyCompanyEventSource.Log.Startup();
            Console.WriteLine("Starting up");

            MyCompanyEventSource.Log.DBQueryStart("Select * from MYTable");
            var url = "http://localhost";
            for (int i = 0; i < 10; i++)
            {
                MyCompanyEventSource.Log.PageStart(i, url);
                MyCompanyEventSource.Log.Mark(i);
                MyCompanyEventSource.Log.PageStop(i);
            }
            MyCompanyEventSource.Log.DBQueryStop();
            MyCompanyEventSource.Log.LogColor(MyColor.Blue);

            MyCompanyEventSource.Log.Failure("This is a failure 1");
            MyCompanyEventSource.Log.Failure("This is a failure 2");
            MyCompanyEventSource.Log.Failure("This is a failure 3");
        }
    }
}
Imports System.Diagnostics.Tracing


Enum MyColor
    Red
    Yellow
    Blue
End Enum 'MyColor 
<EventSource(Name:="MyCompany")> _
Class MyCompanyEventSource
    Inherits EventSource

    Public Class Keywords
        Public Const Page As EventKeywords = CType(1, EventKeywords)
        Public Const DataBase As EventKeywords = CType(2, EventKeywords)
        Public Const Diagnostic As EventKeywords = CType(4, EventKeywords)
        Public Const Perf As EventKeywords = CType(8, EventKeywords)
    End Class

    Public Class Tasks
        Public Const Page As EventTask = CType(1, EventTask)
        Public Const DBQuery As EventTask = CType(1, EventTask)
    End Class

    <[Event](1, Message:="Application Failure: {0}", Level:=EventLevel.Error, Keywords:=Keywords.Diagnostic)> _
    Public Sub Failure(ByVal message As String)
        WriteEvent(1, message)
    End Sub

    <[Event](2, Message:="Starting up.", Keywords:=Keywords.Perf, Level:=EventLevel.Informational)> _
    Public Sub Startup()
        WriteEvent(2)
    End Sub

    <[Event](3, Message:="loading page {1} activityID={0}", Opcode:=EventOpcode.Start, Task:=Tasks.Page, Keywords:=Keywords.Page, Level:=EventLevel.Informational)> _
    Public Sub PageStart(ByVal ID As Integer, ByVal url As String)
        If IsEnabled() Then
            WriteEvent(3, ID, url)
        End If
    End Sub

    <[Event](4, Opcode:=EventOpcode.Stop, Task:=Tasks.Page, Keywords:=Keywords.Page, Level:=EventLevel.Informational)> _
    Public Sub PageStop(ByVal ID As Integer)
        If IsEnabled() Then
            WriteEvent(4, ID)
        End If
    End Sub

    <[Event](5, Opcode:=EventOpcode.Start, Task:=Tasks.DBQuery, Keywords:=Keywords.DataBase, Level:=EventLevel.Informational)> _
    Public Sub DBQueryStart(ByVal sqlQuery As String)
        WriteEvent(5, sqlQuery)
    End Sub

    <[Event](6, Opcode:=EventOpcode.Stop, Task:=Tasks.DBQuery, Keywords:=Keywords.DataBase, Level:=EventLevel.Informational)> _
    Public Sub DBQueryStop()
        WriteEvent(6)
    End Sub

    <[Event](7, Level:=EventLevel.Verbose, Keywords:=Keywords.DataBase)> _
    Public Sub Mark(ByVal ID As Integer)
        If IsEnabled() Then
            WriteEvent(7, ID)
        End If
    End Sub

    <[Event](8)> _
    Public Sub LogColor(ByVal color As MyColor)
        WriteEvent(8, Fix(color))
    End Sub
    Public Shared Log As New MyCompanyEventSource()
End Class


Class Program

    Shared Sub Main(ByVal args() As String)
        MyCompanyEventSource.Log.Startup()
        Console.WriteLine("Starting up")
        MyCompanyEventSource.Log.DBQueryStart("Select * from MYTable")
        Dim url As String = "http:'localhost"
        Dim i As Integer
        For i = 0 To 9
            MyCompanyEventSource.Log.PageStart(i, url)
            MyCompanyEventSource.Log.Mark(i)
            MyCompanyEventSource.Log.PageStop(i)
        Next i
        MyCompanyEventSource.Log.DBQueryStop()
        MyCompanyEventSource.Log.LogColor(MyColor.Blue)

        MyCompanyEventSource.Log.Failure("This is a failure 1")
        MyCompanyEventSource.Log.Failure("This is a failure 2")
        MyCompanyEventSource.Log.Failure("This is a failure 3")
    End Sub
End Class

Comentários

Essa classe deve ser herdada por uma classe de usuário que fornece eventos específicos a serem usados para o ETW.This class is intended to be inherited by a user class that provides specific events to be used for ETW. Os métodos EventSource.WriteEvent são chamados para registrar os eventos.The EventSource.WriteEvent methods are called to log the events.

Importante

Esse tipo implementa a interface IDisposable.This type implements the IDisposable interface. Quando você terminar de usar o tipo, deverá descartá-lo direta ou indiretamente.When you have finished using the type, you should dispose of it either directly or indirectly. Para descartar o tipo diretamente, chame o método Dispose dele em um bloco try/catch.To dispose of the type directly, call its Dispose method in a try/catch block. Para descartá-lo indiretamente, use um constructo de linguagem como using ( em C#) ou Using (em Visual Basic).To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). Saiba mais na seção "Como usar um objeto que implementa IDisposable" no tópico da interface IDisposable.For more information, see the "Using an Object that Implements IDisposable" section in the IDisposable interface topic.

A funcionalidade básica do EventSource é suficiente para a maioria dos aplicativos.The basic functionality of EventSource is sufficient for most applications. Se você quiser mais controle sobre o manifesto do ETW criado, poderá aplicar o atributo EventAttribute aos métodos.If you want more control over the ETW manifest that is created, you can apply the EventAttribute attribute to the methods. Para aplicativos de origem de eventos avançados, é possível interceptar os comandos que estão sendo enviados para a origem do evento derivado e alterar a filtragem ou fazer com que ações (como despejar uma estrutura de dados) sejam executadas pelo inheritor.For advanced event source applications, it is possible to intercept the commands being sent to the derived event source and change the filtering, or to cause actions (such as dumping a data structure) to be performed by the inheritor. Uma fonte de eventos pode ser ativada com controladores ETW do Windows, como a ferramenta Logman, imediatamente.An event source can be activated with Windows ETW controllers, such as the Logman tool, immediately. Também é possível controlar e interceptar programaticamente o Dispatcher de dados.It is also possible to programmatically control and intercept the data dispatcher. A classe EventListener fornece funcionalidade adicional.The EventListener class provides additional functionality.

A partir do .NET Framework 4.6.NET Framework 4.6, o EventSource fornece suporte ao canal e algumas das regras de validação de origem do evento foram reduzidas.Starting with .NET Framework 4.6.NET Framework 4.6, EventSource provides channel support and some of the event source validation rules have been relaxed. Isso significa que:This means:

  • os tipos de EventSource agora podem implementar interfaces.EventSource types may now implement interfaces. Isso permite o uso de tipos de origem de evento em sistemas de log avançados que usam interfaces para definir um destino de log comum.This enables the use of event source types in advanced logging systems that use interfaces to define a common logging target.

  • O conceito de um tipo de origem de evento de utilitário foi introduzido.The concept of a utility event source type has been introduced. Esse recurso permite o compartilhamento de código entre vários tipos de origem de evento em um projeto para habilitar cenários como sobrecargas de WriteEvent otimizadas.This feature enables sharing code across multiple event source types in a project to enable scenarios such as optimized WriteEvent overloads.

Para obter uma versão da classe EventSource que fornece recursos como suporte de canal, você está direcionado .NET Framework 4.5.1.NET Framework 4.5.1 ou anterior, consulte Microsoft EventSource library 1.0.16.For a version of the EventSource class that provides features such as channel support you are targeting .NET Framework 4.5.1.NET Framework 4.5.1 or earlier, see Microsoft EventSource Library 1.0.16.

Construtores

EventSource()

Cria uma nova instância da classe EventSource.Creates a new instance of the EventSource class.

EventSource(Boolean)

Cria uma nova instância da classe EventSource e especifica se uma exceção deve ser gerada quando ocorre um erro no código do Windows subjacente.Creates a new instance of the EventSource class and specifies whether to throw an exception when an error occurs in the underlying Windows code.

EventSource(EventSourceSettings)

Cria uma nova instância da classe EventSource com as definições de configuração especificadas.Creates a new instance of the EventSource class with the specified configuration settings.

EventSource(EventSourceSettings, String[])

Inicializa uma nova instância do EventSource a ser usada com eventos que não são de contrato que contém as configurações e características especificadas.Initializes a new instance of the EventSource to be used with non-contract events that contains the specified settings and traits.

EventSource(String)

Cria uma nova instância da classe EventSource com o nome especificado.Creates a new instance of the EventSource class with the specified name.

EventSource(String, EventSourceSettings)

Cria uma nova instância da classe EventSource com o nome e as configurações especificados.Creates a new instance of the EventSource class with the specified name and settings.

EventSource(String, EventSourceSettings, String[])

Cria uma nova instância da classe EventSource com as definições de configuração especificadas.Creates a new instance of the EventSource class with the specified configuration settings.

Propriedades

ConstructionException

Obtém as exceções geradas durante a construção de origem do evento.Gets any exception that was thrown during the construction of the event source.

CurrentThreadActivityId

Obtém a ID de atividade do thread atual.Gets the activity ID of the current thread.

Guid

O identificador exclusivo da origem do evento.The unique identifier for the event source.

Name

O nome amigável da classe que é derivada da origem do evento.The friendly name of the class that is derived from the event source.

Settings

Obtém as configurações aplicadas a esta origem do evento.Gets the settings applied to this event source.

Métodos

Dispose()

Libera todos os recursos usados pela instância atual da classe EventSource.Releases all resources used by the current instance of the EventSource class.

Dispose(Boolean)

Libera os recursos não gerenciados usados pela classe EventSource e, opcionalmente, libera os recursos gerenciados.Releases the unmanaged resources used by the EventSource class and optionally releases the managed resources.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.Determines whether the specified object is equal to the current object.

(Herdado de Object)
Finalize()

Permite que o objeto EventSource tente liberar recursos e executar outras operações de limpeza antes que o objeto seja obtido pela coleta de lixo.Allows the EventSource object to attempt to free resources and perform other cleanup operations before the object is reclaimed by garbage collection.

GenerateManifest(Type, String)

Retorna uma cadeia de caracteres do manifesto XML que está associado à origem do evento atual.Returns a string of the XML manifest that is associated with the current event source.

GenerateManifest(Type, String, EventManifestOptions)

Retorna uma cadeia de caracteres do manifesto XML que está associado à origem do evento atual.Returns a string of the XML manifest that is associated with the current event source.

GetGuid(Type)

Obtém o identificador exclusivo para essa implementação da origem do evento.Gets the unique identifier for this implementation of the event source.

GetHashCode()

Serve como a função de hash padrão.Serves as the default hash function.

(Herdado de Object)
GetName(Type)

Obtém o nome amigável da origem do evento.Gets the friendly name of the event source.

GetSources()

Obtém um instantâneo de todas as origens do evento para o domínio do aplicativo.Gets a snapshot of all the event sources for the application domain.

GetTrait(String)

Obtém o valor de característica associado à chave especificada.Gets the trait value associated with the specified key.

GetType()

Obtém o Type da instância atual.Gets the Type of the current instance.

(Herdado de Object)
IsEnabled()

Determina se a origem do evento atual está habilitada.Determines whether the current event source is enabled.

IsEnabled(EventLevel, EventKeywords)

Determina se a origem do evento atual que tem o nível e a palavra-chave especificados está habilitada.Determines whether the current event source that has the specified level and keyword is enabled.

IsEnabled(EventLevel, EventKeywords, EventChannel)

Determina se a origem do evento atual é habilitada para eventos com o nível, palavras-chave e canais específicos.Determines whether the current event source is enabled for events with the specified level, keywords and channel.

MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
OnEventCommand(EventCommandEventArgs)

Chamado quando a origem do evento atual é atualizada pelo controlador.Called when the current event source is updated by the controller.

SendCommand(EventSource, EventCommand, IDictionary<String,String>)

Envia um comando para uma origem do evento especificada.Sends a command to a specified event source.

SetCurrentThreadActivityId(Guid)

Define a ID de atividade no thread atual.Sets the activity ID on the current thread.

SetCurrentThreadActivityId(Guid, Guid)

Define a ID de atividade no thread atual e retorna a ID da atividade anterior.Sets the activity ID on the current thread, and returns the previous activity ID.

ToString()

Obtém uma representação de cadeia de caracteres da instância da origem do evento atual.Obtains a string representation of the current event source instance.

Write(String)

Grava um evento sem campos, mas com o nome e as opções padrão especificados.Writes an event without fields, but with the specified name and default options.

Write(String, EventSourceOptions)

Grava um evento sem campos, mas com o nome e as opções especificadas.Writes an event without fields, but with the specified name and options.

Write<T>(String, EventSourceOptions, Guid, Guid, T)

Grava um evento com o nome, opções, dados de atividade e de evento relacionados especificados.Writes an event with the specified name, options, related activity and event data.

Write<T>(String, EventSourceOptions, T)

Grava um evento com o nome, dados de evento e opções especificados.Writes an event with the specified name, event data and options.

Write<T>(String, EventSourceOptions, T)

Grava um evento com o nome, opções e dados de evento especificados.Writes an event with the specified name, options and event data.

Write<T>(String, T)

Grava um evento com o nome e os dados especificados.Writes an event with the specified name and data.

WriteEvent(Int32)

Grava um evento usando o identificador de evento fornecido.Writes an event by using the provided event identifier.

WriteEvent(Int32, Byte[])

Grava um evento usando o identificador de evento e o argumento de matriz de bytes fornecidos.Writes an event by using the provided event identifier and byte array argument.

WriteEvent(Int32, Int32)

Grava um evento usando o identificador de evento e o argumento inteiro de 32 bits fornecidos.Writes an event by using the provided event identifier and 32-bit integer argument.

WriteEvent(Int32, Int32, Int32)

Grava um evento usando o identificador de evento e os argumentos inteiros de 32 bits fornecidos.Writes an event by using the provided event identifier and 32-bit integer arguments.

WriteEvent(Int32, Int32, Int32, Int32)

Grava um evento usando o identificador de evento e os argumentos inteiros de 32 bits fornecidos.Writes an event by using the provided event identifier and 32-bit integer arguments.

WriteEvent(Int32, Int32, String)

Grava um evento usando o identificador de evento fornecido e argumentos inteiros de 32 bits e cadeia de caracteres fornecidos.Writes an event by using the provided event identifier and 32-bit integer and string arguments.

WriteEvent(Int32, Int64)

Grava um evento usando o identificador de evento e o argumento inteiro de 64 bits fornecidos.Writes an event by using the provided event identifier and 64-bit integer argument.

WriteEvent(Int32, Int64, Byte[])

Grava os dados de evento usando o identificador especificado e inteiro de 64 bits e argumentos da matriz de bytes.Writes the event data using the specified identifier and 64-bit integer and byte array arguments.

WriteEvent(Int32, Int64, Int64)

Grava um evento usando o identificador de evento fornecido e os argumentos 64 bits.Writes an event by using the provided event identifier and 64-bit arguments.

WriteEvent(Int32, Int64, Int64, Int64)

Grava um evento usando o identificador de evento fornecido e os argumentos 64 bits.Writes an event by using the provided event identifier and 64-bit arguments.

WriteEvent(Int32, Int64, String)

Grava um evento usando o identificador de evento fornecido e argumentos inteiros de 64 bits e cadeia de caracteres fornecidos.Writes an event by using the provided event identifier and 64-bit integer, and string arguments.

WriteEvent(Int32, Object[])

Grava um evento usando o identificador de evento fornecido e a matriz de argumentos.Writes an event by using the provided event identifier and array of arguments.

WriteEvent(Int32, String)

Grava um evento usando o identificador de evento e o argumentos de cadeia de caractere fornecidos.Writes an event by using the provided event identifier and string argument.

WriteEvent(Int32, String, Int32)

Grava um evento usando o identificador de evento fornecido e os argumentos.Writes an event by using the provided event identifier and arguments.

WriteEvent(Int32, String, Int32, Int32)

Grava um evento usando o identificador de evento fornecido e os argumentos.Writes an event by using the provided event identifier and arguments.

WriteEvent(Int32, String, Int64)

Grava um evento usando o identificador de evento fornecido e os argumentos.Writes an event by using the provided event identifier and arguments.

WriteEvent(Int32, String, String)

Grava um evento usando o identificador de evento e os argumentos de cadeia de caractere fornecidos.Writes an event by using the provided event identifier and string arguments.

WriteEvent(Int32, String, String, String)

Grava um evento usando o identificador de evento e os argumentos de cadeia de caractere fornecidos.Writes an event by using the provided event identifier and string arguments.

WriteEventCore(Int32, Int32, EventSource+EventData*)

Cria uma nova sobrecarga WriteEvent usando o identificador de evento fornecidos e os dados de evento.Creates a new WriteEvent overload by using the provided event identifier and event data.

WriteEventWithRelatedActivityId(Int32, Guid, Object[])

Grava um evento que indica que a atividade atual está relacionada a outra atividade.Writes an event that indicates that the current activity is related to another activity.

WriteEventWithRelatedActivityIdCore(Int32, Guid*, Int32, EventSource+EventData*)

Grava um evento que indica que a atividade atual está relacionada a outra atividade.Writes an event that indicates that the current activity is related to another activity.

Eventos

EventCommandExecuted

Ocorre quando um comando é proveniente de um ouvinte de evento.Occurs when a command comes from an event listener.

Aplica-se a

Acesso thread-safe

Este tipo é thread-safe.This type is thread safe.