2010-05-04 11 views
0

si l'histoire va comme ceci:Désactiver le filtre LogEnabled à l'exécution - Enterprise Application Connexion Bloc

J'utilise le bloc d'application Enterprise Logging qui a fourni par Microsoft pour enregistrer les événements dans notre application.

L'objectif est d'activer la journalisation de l'observateur d'événements au chargement, puis de l'éteindre.

Ce que j'ai fait est d'ajouter EventLog TraceListener qui écrit tous nos journaux dans l'observateur d'événements. Ce que j'essaie de faire est de le désactiver après le chargement de l'application. La seule façon que je peux faire est d'ajouter un filtre LogEnabled, puis l'éteindre.

Cependant, je ne sais pas comment accéder à ce filtre lors de l'exécution et désactiver la connexion sur cet écouteur.

Si vous avez une idée, s'il vous plaît partager.

Merci

+0

Votre configuration de TraceListener est-elle configurée? Voulez-vous désactiver la journalisation par programmation? –

Répondre

1

exploitation forestière Enterprise Library offre un tas de bits à tripoter. Donc, avant de changer la configuration, peut-être que certains des paramètres de la boîte peuvent vous permettre de faire ce que vous voulez?

Il me semble que vous voulez que votre application enregistre certains messages au démarrage, puis ne consigner plus aucun message. Je suppose que vous savez explicitement quand vous avez fini de consigner les messages de démarrage.

Si ce qui précède est vrai, je pense que la méthode la plus simple consisterait à utiliser la propriété LogEntry Priority.

Dans la configuration du fichier de configuration d'un filtre de priorité avec une priorité minimum de 2:

<logFilters> 
    <add minimumPriority="2" maximumPriority="2147483647" type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.PriorityFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null" 
    name="Priority" /> 
    <add enabled="true" type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.LogEnabledFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null" 
    name="LogEnabled Filter" /> 
</logFilters> 

Ensuite, lors du démarrage utiliser une priorité de 2 (ou plus) pour se connecter à vos messages. Puis, quand vous savez que vous avez terminé de définir la priorité jusqu'à 1.

j'intégrerait mieux, mais un exemple de code ressemblerait à ceci:

public class MyApp 
{ 
    public static int LogPriority = 2; 
    public static readonly string MyAppCategory = "MyAppCategory"; 

    static void Main() 
    { 
     Logger.Write("Loading 1...", MyAppCategory, LogPriority); 
     // ...  
     Logger.Write("Loading 2...", MyAppCategory, LogPriority); 

     // Done loading so turn off logging 
     LogPriority = 1; 

     Logger.Write("Message not logged", MyAppCategory, LogPriority); 
    } 
} 


Maintenant, si jamais vous voulez activer la journalisation pour le reste de votre application, il suffit de baisser le filtre de priorité de 2 à 1 et tout sera consigné.

+0

Pourquoi c'est compliqué? À quoi sert l'entrée LogEnabledFilter si vous ne pouvez pas la définir sur false pendant l'exécution, cela signifie: désactiver la journalisation? – Legends

+0

Oui, vous pouvez désactiver la journalisation en définissant LogEnabledFiter. Le principal moyen de le faire serait de modifier manuellement le fichier de configuration - c'est l'intention principale de cette fonctionnalité (guide de développeurs référence les administrateurs peaufinant ce paramètre). D'autres approches similaires pour définir le filtre consistent à modifier par programmation la configuration basée sur un fichier original (qui est essentiellement une reconfiguration du bloc), ou à reconfigurer le bloc par programmation (par exemple en utilisant l'interface fluide). Aucune des approches programmatiques n'est ce que j'appellerais simple –

+0

Si vous essayez d'obtenir le filtre et de le désactiver, je ne pense pas qu'il ait un effet sans une reconfiguration. Le code suivant se termine donc toujours: 'var enabledFilter = logWriter.GetFilter (); enabledFilter.Enabled = false; logWriter.Write ("TEST"); 'Une approche non-EntLib serait juste de gérer l'activer/désactiver vous-même avec une propriété booléenne et une classe d'assistance. Mais je pense que l'approche prioritaire est une alternative assez simple. –