Partilhar via


Vestígios de diagnóstico

Rastros são a publicação de mensagens específicas geradas durante a execução do aplicativo. Ao usar o rastreamento, você deve ter um mecanismo para coletar e gravar as mensagens enviadas. As mensagens de rastreamento são recebidas pelos ouvintes. O objetivo de um ouvinte é coletar, armazenar e rotear mensagens de rastreamento. Os ouvintes direcionam a saída de rastreamento para um destino apropriado, como um log, uma janela ou um arquivo de texto.

Um desses ouvintes, o DefaultTraceListener, é criado e inicializado automaticamente quando o rastreamento está habilitado. Se desejar que a saída de rastreamento seja direcionada para quaisquer fontes adicionais, crie e inicialize ouvintes de rastreamento adicionais. Os ouvintes que você cria 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 gravasse toda a saída em 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ê pode criar um ouvinte 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 saída de rastreamento para um fluxo.

Ativando o rastreamento

Para habilitar rastreamentos durante o processamento de transações, você deve editar o arquivo de configuração do aplicativo. Segue-se 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>

System.Transactions os rastreamentos são gravados na fonte chamada "System.Transactions". Você pode usar add para especificar o nome e o tipo do ouvinte de rastreamento que deseja usar. Em nossa configuração de exemplo, nomeamos o ouvinte "tx" e adicionamos o ouvinte de rastreamento padrão do .NET Framework (XmlWriterTraceListener) como o tipo que queremos 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.

A cada tipo de mensagem de rastreamento é atribuído 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 definição switchValue no ficheiro de configuração. Os níveis associados a mensagens de rastreamento de diagnóstico são definidos na tabela a seguir.

Nível de rastreio Descrição
Crítico Ocorreram falhas graves, como as seguintes:

- Um erro que pode causar uma perda imediata na funcionalidade do usuário.
- Um evento que requer que um administrador tome medidas para evitar a perda de funcionalidade.
- O código bloqueia.
- Este nível de rastreio pode também fornecer contexto suficiente para interpretar outros vestígios críticos. Isso pode ajudar a identificar a sequência de operações que levam 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.
Advertência Existe uma condição que pode subsequentemente resultar 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 limites, falha na autenticação) também pode gerar um aviso.
Informação São geradas mensagens úteis para monitorizar e diagnosticar o estado do sistema, medir o desempenho ou criar perfis. Estes podem incluir eventos do ciclo de vida de transações e alistamentos, como a criação ou confirmação de uma transação, o cruzamento de um limite significativo ou a alocação de recursos significativos. Um desenvolvedor pode então utilizar essas informações para planejamento de capacidade e gerenciamento de desempenho.

Códigos de rastreio

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

TraceCode Tipo de Evento Dados extras no TraceRecord
Transação Criada Informações Id de Rastreio de Transação
TransaçãoPromovida Informações TransactionTraceId local, TransactionTraceId distribuído
AlistamentoCriado Informações TransactionTraceId, EnlistmentTraceId, EnlistmentType (durável/volátil), EnlistmentOptions
AlistamentoCallbackNegativo Advertência TransactionTraceId, EnlistmentTraceId,

Callback (forçar reversão/abortado/em dúvida)
TransactionRollbackCalled Advertência Id de Rastreio de Transação
Transação Abortada Advertência Id de Rastreio de Transação
Transação Em Dúvida Advertência Id de Rastreio de Transação
Âmbito de Transação Criado Informações TransactionScopeResult, que pode ser o seguinte:

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

novo id de rastreamento de transações atual
EscopoDaTransaçãoDescartado Informações TransactionTraceId da transação atual "esperada" do escopo.
Transação Escopo Incompleto Advertência TransactionTraceId da transação atual "esperada" do escopo.
TransactionScopeAninhadoIncorretamente Advertência TransactionTraceId da transação atual "esperada" do escopo.
TransactionScopeTransaçãoAtualAlterada Advertência TransactionTraceId atual antigo, outro TransactionTraceId
TempoLimiteDoEscopoDeTransação Advertência TransactionTraceId da transação atual "esperada" do escopo.
DependentCloneCriado Informações TransactionTraceId, tipo de transação dependente criada (RollbackIfNotComplete/BlockCommitUntilComplete)
DependentCloneComplete Informações Id de Rastreio de Transação
Recuperação Concluída Informações GUID do Gerente de Recursos (a partir da base)
Reenlist Informações GUID do Gerente de Recursos (a partir da base)
TransaçãoSerializada Informações IdDeRastreioDeTransação
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 uma System.Transactions transação para uma distribuída, o ActivityID atual do ExecutionContext e o ID da transação distribuída são gravados.

Quando o DTC executa um callback no código gerido, o ID da transação distribuída é definido como ActivityID no contexto de execução durante a realização do callback.
TempoDeEsperaPadrãoConfiguradoAjustado Advertência Sem dados extras
TempoLimiteDeTransação Advertência O TransactionTraceId da transação que está a ser expirada.

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

IdentificadorDeRastroDeTransação (TransactionTraceIdentifier)

<TransactionTraceIdentifier>

<TransactionIdentifier >

string representation of transaction id

</TransactionIdentifier>

< CloneIdentifier >

the clone id number

</CloneIdentifier>

</TransactionTraceIdentifier>

IdentificadorDeRastreioDeAlistamento

<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 Gestor 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 visualizado publicamente por padrão. Para mitigar qualquer possível ameaça à segurança, você deve considerar armazenar o log de rastreamento em um local seguro controlado por permissões de compartilhamento e acesso ao sistema de arquivos.