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.