Compartilhar via


Rastros de diagnóstico

Os rastreamentos são a publicação de mensagens específicas que são gerados durante a execução do aplicativo. Ao usar o rastreamento, você deve ter um mecanismo para coletar e gravar as mensagens enviadas. Mensagens de rastreamento são recebidas por ouvintes. A finalidade de um ouvinte é coletar, armazenar e rotear mensagens de rastreamento. Os escutadores direcionam a saída de rastreamento para um destino apropriado, como um log, uma janela ou um arquivo de texto.

Um ouvinte, o DefaultTraceListener, é criado e inicializado automaticamente quando o rastreamento está habilitado. Se você quiser que a saída de rastreamento seja direcionada para quaisquer fontes adicionais, você deve criar e inicializar ouvintes de rastreamento adicionais. Os ouvintes criados devem refletir suas necessidades individuais. Por exemplo, talvez você queira um registro de texto de todas as saídas de rastreamento. Nesse caso, você criaria um ouvinte que escrevi todas as saídas para um novo arquivo de texto quando habilitado. Por outro lado, talvez você queira exibir apenas a saída durante a execução do aplicativo. Nesse caso, você poderia criar um "listener" que direcione toda a saída para uma janela do console. O EventLogTraceListener pode direcionar a saída de rastreamento para um log de eventos, e o TextWriterTraceListener pode gravar a saída de rastreamento em um fluxo.

Habilitando o rastreamento

Para habilitar rastreamentos durante o processamento de transações, você deve editar o arquivo de configuração do aplicativo. A seguir, é mostrado um exemplo.

<configuration>
<system.diagnostics>
     <sources>
          <source name="System.Transactions" switchValue="Warning">
               <listeners>
                    <add name="tx"
                     type="System.Diagnostics.XmlWriterTraceListener"
                     initializeData= "tx.log" />
               </listeners>
          </source>
     </sources>
</system.diagnostics>
</configuration>

Os rastreamentos System.Transactions são gravados na origem chamada "System.Transactions". Você pode usar add para especificar o nome e o tipo do ouvinte de rastreamento que deseja usar. Em nosso exemplo de configuração, é chamado o ouvinte "tx" e adicionado o ouvinte de rastreamento padrão do .NET Framework (XmlWriterTraceListener) como o tipo que deseja usar. Use initializeData para definir o nome do arquivo de log para esse ouvinte. Além disso, você pode substituir um caminho totalmente qualificado por um nome de arquivo simples.

Cada tipo de mensagem de rastreamento recebe um nível para indicar seu grau de importância. Se o nível de rastreamento do domínio do aplicativo for igual ou inferior ao nível de um tipo de evento, essa mensagem será gerada. O nível de rastreamento é controlado pela configuração switchValue no arquivo de configuração. Os níveis associados às mensagens de rastreamento de diagnóstico são definidos na tabela a seguir.

Nível de rastreamento: Descrição
Crítico Falhas graves, como a seguinte, ocorreram:

- Um erro que pode causar uma perda imediata na funcionalidade do usuário.
- Um evento que exige que um administrador tome medidas para evitar a perda de funcionalidade.
- Paradas de código.
- Esse nível de rastreamento também pode fornecer contexto suficiente para interpretar outros rastreamentos críticos. Isso pode ajudar a identificar a sequência de operações que leva a uma falha grave.
Erro Ocorreu um erro (por exemplo, configuração inválida ou comportamento de rede) que pode resultar em uma perda de funcionalidade do usuário.
Aviso Existe uma condição que pode resultar posteriormente em um erro ou falha crítica (por exemplo, falha de alocação ou aproximação de um limite). O processamento normal de erros do código do usuário (por exemplo, transação anulada, tempos limite, falha na autenticação) também pode gerar um aviso.
Informação Mensagens úteis para monitorar e diagnosticar o status do sistema, medir o desempenho ou criação de perfil são geradas. Isso pode incluir eventos ao longo do ciclo de vida de transações e inscrições, como a criação ou confirmação de uma transação, a superação de um limite significativo ou a alocação de recursos significativos. Em seguida, um desenvolvedor pode utilizar essas informações para planejamento de capacidade e gerenciamento de desempenho.

Códigos de rastreamento

A tabela a seguir lista os códigos de rastreamento gerados pela System.Transactions infraestrutura. Incluídos na tabela estão o identificador de código de rastreamento, o EventType nível de enumeração para o rastreamento e os dados extras contidos no TraceRecord de rastreamento. Além disso, o nível de rastreamento correspondente do rastreamento também é armazenado no TraceRecord.

TraceCode Tipo de Evento Dados extras no TraceRecord
TransactionCreated Informações IdentificadorDeRastreamentoDeTransação
TransactionPromoted Informações TransactionTraceId local, TransactionTraceId distribuída
EnlistmentCreated Informações TransactionTraceId, EnlistmentTraceId, EnlistmentType (duráveis voláteis), EnlistmentOptions
EnlistmentCallbackNegative Aviso IdentificadorDeRastreamentoDeTransação, IdentificadorDeRastreamentoDeInscrição.

Retorno de chamada (forcerollback/anulado/incertas)
TransactionRollbackCalled Aviso IdentificadorDeRastreamentoDeTransação
TransactionAborted Aviso IdentificadorDeRastreamentoDeTransação
TransaçãoEmDúvida Aviso IdentificadorDeRastreamentoDeTransação
TransactionScopeCreated Informações TransactionScopeResult, que pode ser o seguinte:

- Nova transação.
- Transação aprovada.
- Transação dependente passado.
- Usando a transação atual.
- Nenhuma transação.

novo TransactionTraceId atual
TransactionScopeDisposed Informações TransactionTraceId do escopo "esperado" da transação atual.
EscopoDeTransaçãoIncompleto Aviso TransactionTraceId do escopo "esperado" da transação atual.
TransactionScopeNestedIncorrectly Aviso TransactionTraceId do escopo "esperado" da transação atual.
TransactionScopeCurrentTransactionChanged Aviso Antigo TransactionTraceId atual, outro TransactionTraceId
TransactionScopeTimeout Aviso TransactionTraceId do escopo "esperado" da transação atual.
DependentCloneCreated Informações TransactionTraceId, tipo de transação dependente criado (RollbackIfNotComplete/BlockCommitUntilComplete)
DependentCloneComplete Informações IdentificadorDeRastreamentoDeTransação
Recuperação Concluída Informações Gerenciador de recursos de GUID (de base)
Reenlist Informações Gerenciador de recursos de GUID (de base)
TransactionSerialized Informações TransactionTraceId.
Exceção de Transação Erro Mensagem de exceção
Exceção de Operação Inválida Erro Mensagem de exceção
Erro Interno Crítico Mensagem de exceção
TransferEvent Quando uma transação é desserializada ou promovida de um System.Transactions transação para um distribuído, o ActivityID atual de ExecutionContext e a ID de transação distribuída são gravados.

Quando o DTC chama de volta em código gerenciado, a ID de transação distribuída é definida como o ActivityID em ExecutionContext durante o retorno de chamada.
ConfiguredDefaultTimeoutAdjusted Aviso Nenhum dado extra
TransactionTimeout Aviso TransactionTraceId da transação que está sendo atingiu o tempo limite.

O esquema XML para cada um dos itens de dados extras anteriores tem o seguinte formato.

IdentificadorDeRastreamentoDeTransação

<TransactionTraceIdentifier>

<TransactionIdentifier >

string representation of transaction id

</TransactionIdentifier>

< CloneIdentifier >

the clone id number

</CloneIdentifier>

</TransactionTraceIdentifier>

EnlistmentTraceIdentifier

<EnlistmentTraceIdentifier>

<ResourceManagerId>

string form of guid

</ResourceManagerId>

<TransactionTraceIdentifier>

<TransactionIdentifier >

string representation of transaction id

</TransactionIdentifier>

<CloneIdentifier >

the clone id number

</CloneIdentifier>

<TransactionTraceIdentifier>

<EnlistmentIdentifier>

the enlistment id number

</EnlistmentIdentifier>

</EnlistmentTraceIdentifier>

Identificador do Gerenciador de Recursos

<ResourceManagerId>

string form of guid

</ResourceManagerId>

Problemas de segurança para rastreamento

Quando você, como administrador, ativa o rastreamento, informações confidenciais podem ser gravadas em um log de rastreamento que pode ser exibido publicamente por padrão. Para atenuar qualquer possível ameaça à segurança, você deve considerar armazenar o log de rastreamento em um local seguro controlado por compartilhamento e permissões de acesso do sistema de arquivos.