Logs de eventos e componentes multithread

Os logs de evento são para acompanhar eventos significativos quando um aplicativo está sendo executado. Usando logs de eventos, você pode registrar informações que podem ser úteis para solução de problemas, análise de desempenho. Existem considerações adicionais quando o log de eventos com componentes multissegmentados. Primeiro, deve haver um mecanismo para registrar a identidade do segmento a mensagem de log. Segundo, segurança do thread deve ser levada em conta ao interagir com o log de eventos. O segmento tentar gravar uma mensagem deve obter um bloqueio exclusivo no log a fim de evitar condições de corrida. Para uma visão geral dos logs de eventos, consulte Logs de eventos de administração de. Para obter mais informações sobre segurança do thread, consulte Componentes de Thread-Safe.

Para identificar cada thread, você deve definir o A propriedade de Thread.Name. Essa propriedade utiliza e retorna um String valor e pode ser usado para definir um identificador exclusivo para cada segmento. Esse valor, em seguida, pode ser passado para o EventLog.CreateEventSource método para designar o thread como um a fonte de evento para cada segmento. Quando o log de eventos, o thread pode definir o Source propriedade de log de eventos para o seu nome, garantindo assim a preciso log de eventos.

Durante a execução de várias linhas de código em um ambiente multithread, é importante que os threads obtenham bloqueios exclusivos no log de eventos antes de executar qualquer código. Por exemplo, considere as seguintes linhas de código, executado em um ambiente multithread:

MyEventLog.Source = Threading.Thread.CurrentThread.Name.ToString
EventLog.WriteEntry("What thread did this come from?", "myApplication")
MyEventLog.Source = System.Threading.Thread.CurrentThread.Name.ToString();
EventLog.WriteEntry("What thread did this come from?", "myApplication");

Se vários segmentos estão executando essas linhas simultaneamente, se é possível que um segmento para alterar o A propriedade de EventLog.Source do log de eventos e outro thread escrever uma mensagem depois que essa propriedade foi alterada. Para evitar condições como essas, você pode usar o Instrução SyncLock (Visual Basic) ou lock (C#) a instrução para obter um bloqueio exclusivo no objeto antes de executar o código de vários segmentos. Usando o bloqueio, o exemplo anterior seria parecer com o seguinte:

SyncLock MyEventLog
   MyEventLog.Source = System.Threading.Thread.CurrentThread.Name.ToString
   EventLog.WriteEntry("What thread did this come from?", "myApplication")
End SyncLock
lock(MyEventLog)
{
   MyEventLog.Source = Threading.Thread.CurrentThread.Name.ToString();
   EventLog.WriteEntry("What thread did this come from?", 
      "myApplication");
}

Você também pode usar o Debug e Trace classes de log de eventos que ocorre em aplicativos multithread. Essas classes são classes estáticas que permitem que você envie a saída para a janela de saída, a janela de console, um arquivo de texto ou o log de eventos ou qualquer outra de um número de objetos. Para obter detalhes, consulte Tracing and Instrumenting Applications em Visual Basic e C# Visual.

Consulte também

Tarefas

Como: Eventos de log para componentes multithread

Outros recursos

Multithreading em componentes