Partager via


Traces de diagnostic

Les traces sont la publication de messages spécifiques générés pendant l’exécution de l’application. Lorsque vous utilisez le suivi, vous devez disposer d’un mécanisme permettant de collecter et d’enregistrer les messages envoyés. Les messages de trace sont reçus par les écouteurs. L’objectif d’un écouteur est de collecter, stocker et 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.

Un de ces écouteurs, le DefaultTraceListener, est créé et initialisé automatiquement lorsque le suivi est activé. Si vous souhaitez que la sortie de trace soit dirigée vers des sources supplémentaires, vous devez créer et initialiser des écouteurs de trace supplémentaires. Les écouteurs que vous créez doivent refléter vos besoins individuels. Par exemple, vous souhaiterez peut-être un enregistrement texte de tous les résultats de trace. Dans ce cas, vous créeriez un écouteur qui écrit tous les résultats dans un nouveau fichier texte lorsqu'il est activé. En revanche, vous ne souhaiterez peut-être afficher la sortie que pendant 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. L'élément EventLogTraceListener peut diriger la sortie de trace vers un journal des événements, et l'élément TextWriterTraceListener peut écrire la sortie de trace dans un flux.

Activation du traçage

Pour activer les traces pendant le traitement des transactions, 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 spécifier le nom et le type de l’écouteur de trace que vous souhaitez utiliser. Dans notre exemple de configuration, nous avons nommé l’écouteur « tx » et ajouté l’écouteur de trace .NET Framework standard (XmlWriterTraceListener) comme type que nous voulons utiliser. Permet initializeData de définir le nom du fichier journal pour cet écouteur. En outre, vous pouvez utiliser un chemin complet à la place d'un simple nom de fichier.

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

Niveau de suivi Descriptif
Essentiel Des défaillances graves, telles que les suivantes, se sont produites :

- Erreur pouvant entraîner une perte immédiate dans les fonctionnalités de l’utilisateur.
- Événement qui exige qu’un administrateur prenne des mesures pour éviter la perte de fonctionnalités.
- Pannes de code.
- Ce niveau de suivi peut également fournir un contexte suffisant pour interpréter d’autres traces critiques. Cela peut aider à identifier la séquence d’opérations entraînant une défaillance grave.
Erreur Une erreur (par exemple, une configuration non valide ou un comportement réseau) s’est produite, ce qui peut entraîner une perte de fonctionnalités utilisateur.
Avertissement Une condition existe qui peut par la suite entraîner une erreur ou une défaillance critique (par exemple, l’échec d’allocation ou l’approche d’une limite). Le traitement normal des erreurs à partir du code utilisateur (par exemple, la transaction abandonnée, les délais d’attente, l’authentification a échoué) peut également générer un avertissement.
Informations Les messages utiles pour surveiller et diagnostiquer l’état du système, mesurer les performances ou le profilage sont générés. Celles-ci peuvent inclure des événements de cycle de vie de transaction et d'enrôlement, tels que la création ou la validation d'une transaction, le franchissement d'une limite significative ou l'allocation de ressources importantes. Un développeur peut ensuite utiliser ces informations pour la planification de la capacité et la gestion des performances.

Codes de traçabilité

Le tableau suivant répertorie les codes de trace générés par l’infrastructure System.Transactions . Inclus dans la table sont l’identificateur de code de trace, le EventType niveau d’énumération de la trace et les données supplémentaires contenues dans la TraceRecord trace. En outre, le niveau de trace correspondant de la trace est également stocké dans TraceRecord.

TraceCode Type d’événement Données supplémentaires dans TraceRecord
TransactionCreated Informations IdentifiantDeTraçabilitéDeTransaction
TransactionPromoted Informations TransactionTraceId local, TransactionTraceId distribué
InscriptionCreated Informations TransactionTraceId, EnlistmentTraceId, TypeD'Enrôlement (durable/volatile), OptionsD'Enrôlement
EnlistmentCallbackNegative Avertissement TransactionTraceId, EnlistmentTraceId,

Rappel (forcerollback/aborted/indoubt)
TransactionRollbackCalled Avertissement IdentifiantDeTraçabilitéDeTransaction
TransactionAborted Avertissement IdentifiantDeTraçabilitéDeTransaction
Transaction En Doute Avertissement IdentifiantDeTraçabilitéDeTransaction
TransactionScopeCreated Informations TransactionScopeResult, qui peut être le suivant :

- Nouvelle transaction.
- Transaction passée.
- 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 IdentifiantDeTraçabilitéDeTransaction
RecoveryComplete Informations GUID de gestionnaire de ressources (de base)
Réenlister Informations GUID de gestionnaire de ressources (de base)
TransactionSerialized Informations TransactionTraceId.
TransactionException Erreur Message d’exception
Exception d'opération invalide Erreur Message d’exception
Erreur Interne Essentiel Message d’exception
Événement de transfert Lorsqu’une transaction est désérialisée ou promue d’une System.Transactions transaction vers une transaction distribuée, l’ActivityID actuel de ExecutionContext et l’ID de transaction distribué sont écrits.

Lorsque le DTC revient dans le code managé, l’ID de transaction distribué est défini comme ActivityID dans ExecutionContext pendant la durée du rappel.
ConfigureDefaultTimeoutAdjusted Avertissement Aucune donnée supplémentaire
TransactionTimeout Avertissement Le TransactionTraceId de la transaction est sur le point d'expirer.

Le schéma XML pour chacun des éléments de données supplémentaires précédents a le format suivant.

Identifiant du Trace de Transaction

<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é pour le suivi

Lorsque vous en tant qu’administrateur activez le suivi, les informations sensibles peuvent être écrites dans un journal de suivi accessible publiquement par défaut. Pour atténuer toute menace de sécurité possible, vous devez envisager de stocker le journal de trace dans un emplacement sécurisé contrôlé par les autorisations d’accès au système de fichiers et de partage.