Tournant le traçage à l'arrêt via l'app.config
Je suis en train d'utiliser le Système.Les Diagnostics de faire quelques très de base de l'exploitation forestière. Je me dis que je voudrais utiliser ce qui est dans la boîte plutôt que de prendre un supplément de dépendance comme Log4Net ou EntLib.
Je suis tout mettre en place, le suivi est de travail à merveille. Extrait de Code:
Trace.TraceInformation("Hello World")
App.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="TraceListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="Trace.log" traceOutputOptions="DateTime" />
<remove name="Default" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
et mon petit "Hello World" montre bien dans ma Trace.le fichier de log. Mais maintenant, je voudrais DÉSACTIVER le traçage, j'ai donc creuser dans MSDN et trouver Comment faire: Configurer les Commutateurs de Trace
. - Je ajouter de la <switches>
élément, et maintenant mon application.config ressemble à ceci:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="TraceListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="Trace.log" traceOutputOptions="DateTime" />
<remove name="Default" />
</listeners>
</trace>
<switches>
<add name="Data" value="0" />
</switches>
</system.diagnostics>
</configuration>
La value="0"
doit désactiver le suivi - au moins si vous suivez ensuite Comment: Créer et Initialiser Trace des Commutateurs, qui vous dit d'ajouter cette ligne de code:
Dim dataSwitch As New BooleanSwitch("Data", "DataAccess module")
Qui n'a pas de sens pour moi: j'ai juste de déclarer une instance de la BooleanSwicth
pour être en mesure de gérer (désactiver) le traçage via la .fichier de config? Devrais-je voudrais ... utilisation ... l'objet quelque part?
De toute façon, je suis sûr que j'ai raté quelque chose de vraiment évident, quelque part. S'il vous plaît aider.
Comment puis-je DÉSACTIVER le suivi dans l'application.config?
Vous devez vous connecter pour publier un commentaire.
Je suis d'accord avec @Alex Humphrey recommandation de l'essayer à l'aide de TraceSources. Avec TraceSources vous gagner plus de contrôle sur la façon dont votre enregistrement/instructions de suivi d'exécution. Par exemple, vous pourriez avoir un code comme ceci:
La TraceSource.TraceEvent appel sera automatiquement vérifier le niveau du message (TraceEventType.De l'Information) à l'encontre de l'configuré au niveau de l'Interrupteur et de déterminer si oui ou non le message devrait en fait être écrit.
En utilisant un nom différent TraceSource pour chaque type, vous pouvez contrôler l'enregistrement de ces classes individuellement. Vous pouvez activer MyClass1 journalisation ou vous pouvez le désactiver ou vous pouvez l'activer mais il a de journal uniquement si le niveau du message (TraceEventType) est supérieure à une certaine valeur (peut-être seulement du journal "Avertissement" et plus). Dans le même temps, vous pouvez activer la journalisation dans MyClass2 sur désactivé ou mis à niveau, de manière totalement indépendante de MyClass1. L'ensemble de cette activation/désactivation/niveau de choses qui se passe dans l'application.fichier de configuration.
À l'aide de l'application.fichier de configuration, vous pouvez également contrôler tous les TraceSources (ou groupes de TraceSources) de la même manière. Donc, vous pouvez le configurer de sorte que MyClass1 et MyClass2 sont toutes deux contrôlées par la même Commutateur.
Si vous ne voulez pas avoir un nom différent TraceSource pour chaque type, vous pouvez simplement créer le même TraceSource dans chaque classe:
De cette façon, vous pourriez faire de l'abattage au sein de votre application arriver au même niveau (ou être éteint ou aller dans le même TraceListener, ou quoi que ce soit).
Vous pouvez également configurer les différentes parties de votre application pour configurables individuellement, sans avoir à passer le "problème" de la définition d'un unique TraceSource dans chaque type:
Avec votre classe instrumenté de cette façon, vous pourriez faire le "DataAccess" une partie de votre application journal, à un niveau, tandis que les "Analyses" de votre application journaux à un niveau différent (bien sûr, l'une ou les deux parties de votre application peut être configurée de sorte que l'enregistrement est désactivé).
Ici est une partie d'une application.fichier de configuration qui permet de configurer des TraceSources et TraceSwitches:
Comme vous pouvez le voir, vous pouvez configurer un seul TraceSource et un seul Interrupteur et l'abattage pourraient se produire avec un seul niveau de contrôle (ex: vous pouvez tourner à tous connecter ou faire du journal à un certain niveau).
Alternativement, vous pouvez définir plusieurs TraceSources (et de référence correspondant TraceSources dans votre code) et de plusieurs Commutateurs. Les Commutateurs peuvent être partagées (c'est à dire plusieurs TraceSources pouvez utiliser le même Commutateur).
En fin de compte, en les mettant dans un peu plus d'effort pour utiliser TraceSources et de référence bien nommé TraceSources dans votre code (c'est à dire définir la TraceSource noms logiquement, de sorte que vous pouvez être certain degré de contrôle sur l'exploitation forestière dans votre application), vous gagnerez beaucoup de souplesse dans le long terme.
Voici quelques liens qui pourraient vous aider avec le Système.Les Diagnostics que vous aller de l'avant:
.net Diagnostics bonnes pratiques?
La journalisation des meilleures pratiques
Quelle est la meilleure approche pour l'exploitation forestière?
L' .Net TraceSource/TraceListener cadre ont quelque chose de semblable à log4net de Formateurs?
Dans les liens que j'ai posté, il y est souvent question de la "meilleure" de journalisation. Je n'essaie pas de vous convaincre de changer de Système.Diagnostics. Les liens ont aussi tendance à avoir de bonnes informations sur l'utilisation du Système.Diagnostic, c'est pourquoi j'ai posté entre eux.
Plusieurs des liens que j'ai posté contenir un lien vers Ukadc.Diagnostics. C'est vraiment cool d'ajouter de la bibliothèque pour le Système.Les Diagnostics qui ajoute riches capacité de mise en forme, semblable à ce que vous pouvez faire avec log4net et NLog. Cette bibliothèque impose une config seule dépendance sur votre application, non pas à un code de référence ou de dépendance.
Vous n'avez pas de désactiver le traçage à l'échelle mondiale de cette façon.
Vous devez
1) déclarer un interrupteur et définissez sa valeur:
2) associer ce commutateur avec un TraceSource vous utilisez:
Donc, tout ce que vous écrivez via TraceSource nommé "Masource" est filtré en fonction de la valeur du commutateur.
Si vous utilisez des méthodes statiques comme
Trace.Write
, je suppose, vous ne pouvez pas utiliser les commutateurs à tous, car il n'est pas TraceSource pour appliquer le filtre.Si vous souhaitez désactiver le suivi par des méthodes statiques, il suffit de retirer tous les auditeurs:
<listeners> <clear/> </listeners>
.Son la switchValue attribut du nœud source:
Vérifier l'état de dataSwitch quand vous en avez besoin pour ouvrir une session, comme par:
http://msdn.microsoft.com/en-us/library/aa984285%28v=VS.71%29.aspx
Cependant, c'est assez désagréable d'avoir à mettre ces contrôles partout. Est-ce la raison, vous ne voulez pas de simplement retirer la
TraceListener
d'auditeurs de la collection in-app.config?En dehors de cela, je voudrais étudier à l'aide de l' .NET 2.0+ trace des trucs qui comprend
TraceSource
. La nouvelle(er) stuff offre un degré beaucoup plus élevé de configuration, et vous pourriez trouver qu'il est plus approprié.http://msdn.microsoft.com/en-us/library/ms228993.aspx
La fin de joindre avec une rapide note de bas de page à propos de l'application.config, au cas où cela permet d'économiser un couple de jours à partir de la vie de quelqu'un là-bas:
Supposons que vous disposez de la startup.exe) projectA contenant classA ce qui rend l'utilisation de projetb (.dll) contenant classB.
ClassB, à son tour, fait usage d'une nouvelle TraceSource("classB") de l'instance. Pour le configurer, vous devez modifier l'application.config ou projectA. Peaufinage de l'application.config de projetb ne mènent nulle part.
Noter également que le placement de la
Section à l'intérieur de l'app.config semble être à l'origine des problèmes si placé à l'avant de la section:
ou après la section:
Au moins dans mon cas, j'ai été faire des erreurs lorsque j'ai essayé de passer dans ces endroits dans l'application.config de mon projet. La mise en page qui a fonctionné pour moi a été:
Essayer cette solution simple. Dans l'exemple ci-dessous, "SomeNoisyLibrary" est l'abandon de détritus le journal avec beaucoup d'inutiles les entrées. On filtre avec "lorsque la condition"
https://github.com/NLog/NLog/wiki/When-Filter