Traces de diagnostic

Les suivis correspondent à la publication de messages spécifiques générés au cours de l'exécution de l'application. Pour utiliser le suivi, vous devez disposer d'un mécanisme de collecte et d'enregistrement des messages envoyés. Les messages de suivi sont reçus par des écouteurs. Le but d'un écouteur est de collecter, de stocker et de router les messages de suivi. Les écouteurs dirigent la sortie de suivi vers une cible appropriée, telle qu'un journal, une fenêtre ou un fichier de texte.

L'un de ces écouteurs, le DefaultTraceListener, est automatiquement créé et initialisé lorsque le suivi est activé. Pour que la sortie de suivi soit dirigée vers d'autres sources, créez et initialisez des écouteurs de suivi supplémentaires. Les écouteurs que vous créez doivent refléter vos besoins individuels. Par exemple, vous pouvez avoir besoin d'un enregistrement texte de toutes les données de sortie de suivi. Dans ce cas, vous devez créer un écouteur qui écrit toutes les données de sortie dans un nouveau fichier texte lorsque celui-ci est activé. En revanche, il est possible que vous ayez seulement besoin de consulter la sortie lors de l'exécution de l'application. Dans ce cas, vous pouvez créer un écouteur qui dirige toutes les données de sortie vers une fenêtre de console. EventLogTraceListener permet de diriger la sortie de suivi vers un journal des événements et TextWriterTraceListener permet de l'écrire dans un flux.

Activation du traçage

Pour activer les suivis lors du traitement transactionnel, vous devez modifier le fichier de configuration de votre application. Voici un exemple.

<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>  

Les suivis System.Transactions sont écrits dans la source nommée "System.Transactions". Vous pouvez utiliser add pour indiquer les nom et type de l'écouteur de suivi à utiliser. Dans notre configuration exemple, nous avons nommé l'écouteur "tx" et ajouté l'écouteur de suivi standard .NET Framework (XmlWriterTraceListener) en tant que type à utiliser. Utilisez initializeData pour définir le nom du fichier journal de cet écouteur. Vous pouvez également substituer un chemin complet par un nom de fichier simple.

Chaque type de message de suivi se voit assigner un niveau indiquant son degré d'importance. Si le niveau de suivi du domaine d'application est inférieur ou égal au niveau d'un type d'événement, le message est généré. Le niveau de suivi est contrôlé par le paramètre switchValue du fichier de configuration. Les niveaux associés aux messages de suivi de diagnostic sont définis dans le tableau suivant.

Niveau de suivi Description
Critique Des défaillances sérieuses, telles que les défaillances suivantes, se sont produites :

- Erreur susceptible d’entraîner une perte immédiate des fonctionnalités utilisateur.
- Événement qui requiert l’intervention d’un administrateur afin d’éviter une perte de fonctionnalités.
- Pannes de code.
- Ce niveau de suivi peut également fournir un contexte suffisant pour interpréter d’autres suivis critiques. Cela peut aider à l'identification de la séquence d'opérations causant une défaillance sérieuse.
Erreur Une erreur (par exemple, une configuration invalide ou un comportement du réseau) susceptible d'entraîner une perte des fonctionnalités utilisateur s'est produite.
Avertissement Il existe une condition susceptible d'entraîner une erreur ou une défaillance critique (par exemple, un échec d'allocation ou l'approche d'une limite). Le traitement normal d'erreurs dans le code utilisateur (par exemple, l'abandon d'une transaction, l'expiration d'un délai d'attente, un échec d'authentification) peut également entraîner la génération d'un avertissement.
Information Des messages d'aide au contrôle et au diagnostic de l'état système, à la mesure des performances ou au profilage sont générés. Ils peuvent inclure des événements de durée de vie de transaction et d'inscription, tels qu'une transaction en cours de création ou de validation, le dépassement d'une limite importante ou l'allocation de ressources significatives. Un développeur peut ensuite utiliser ces informations pour la planification de capacité et la gestion des performances.

Codes de suivi

Le tableau suivant répertorie les codes de suivi générés par l'infrastructure System.Transactions. Ce tableau comprend l’identificateur du code de suivi, le niveau d’énumération EventType du suivi, ainsi que les données supplémentaires contenues dans l’enregistrement TraceRecord du suivi. L’enregistrement TraceRecord contient également le niveau correspondant du suivi.

TraceCode Type d’événement Données supplémentaires contenues dans TraceRecord
TransactionCreated Informations TransactionTraceId
TransactionPromoted Informations TransactionTraceId local, TransactionTraceId distribué
EnlistmentCreated Informations TransactionTraceId, EnlistmentTraceId, EnlistmentType (durable/volatile), EnlistmentOptions
EnlistmentCallbackNegative Avertissement TransactionTraceId, EnlistmentTraceId,

Callback (forcerollback/aborted/indoubt)
TransactionRollbackCalled Avertissement TransactionTraceId
TransactionAborted Avertissement TransactionTraceId
TransactionInDoubt Avertissement TransactionTraceId
TransactionScopeCreated Informations TransactionScopeResult, qui peut correspondre à l'un des éléments suivants :

- Nouvelle transaction.
- Transaction réussie.
- Transaction dépendante réussie.
- Utilisation de la transaction en cours.
- Aucune transaction

nouveau TransactionTraceId en cours
TransactionScopeDisposed Informations TransactionTraceId de la transaction en cours « prévue » de l’étendue.
TransactionScopeIncomplete Avertissement TransactionTraceId de la transaction en cours « prévue » de l’étendue.
TransactionScopeNestedIncorrectly Avertissement TransactionTraceId de la transaction en cours « prévue » de l’étendue.
TransactionScopeCurrentTransactionChanged Avertissement Ancien TransactionTraceId en cours, autre TransactionTraceId
TransactionScopeTimeout Avertissement TransactionTraceId de la transaction en cours « prévue » de l’étendue.
DependentCloneCreated Informations TransactionTraceId, type de transaction dépendante créée (RollbackIfNotComplete/BlockCommitUntilComplete)
DependentCloneComplete Informations TransactionTraceId
RecoveryComplete Informations GUID de gestionnaire de ressources (de base)
Reenlist Informations GUID de gestionnaire de ressources (de base)
TransactionSerialized Informations TransactionTraceId.
TransactionException Erreur Message d'exception
InvalidOperationException Erreur Message d'exception
InternalError Critique Message d'exception
TransferEvent Lorsqu'une transaction est désérialisée ou promue de transaction System.Transactions à transaction distribuée, l'actuel ActivityID issu d'ExecutionContext et l'ID de la transaction distribuée sont écrits.

Lorsque le DTC rappelle le code managé, l'ID de la transaction distribuée est défini en tant qu'ActivityID dans ExecutionContext pour la durée du rappel.
ConfiguredDefaultTimeoutAdjusted Avertissement Aucune donnée supplémentaire
TransactionTimeout Avertissement Le TransactionTraceId de la transaction est sur le point d'expirer.

Le schéma XML des éléments de données supplémentaires précédents se présente au format suivant.

TransactionTraceIdentifier

<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>

Identificateur de gestionnaire de ressources

<ResourceManagerId>

string form of guid

</ResourceManagerId>

Problèmes de sécurité liés au suivi

Lorsque vous activez le suivi en tant qu'administrateur, il se peut que des informations sensibles soient écrites dans un journal de suivi à consultation publique par défaut. Pour éviter toute menace de sécurité, pensez à stocker le journal de suivi à un emplacement sécurisé contrôlé par des autorisations de partage et d'accès au système de fichiers.