2009-11-20 5 views
1

J'ai une application web où j'aimerais ajouter ou éditer la journalisation d'Enterprise Library à l'exécution. Je suis familier avec la façon de configurer EntLib Logging complètement par programme et à travers le fichier de configuration, mais je voudrais utiliser une combinaison des deux. Je voudrais avoir une configuration de base TraceListeners via le fichier de configuration, mais au démarrage de l'application, j'aimerais ajouter des Email TraceListeners en fonction d'autres paramètres utilisateur stockés dans une base de données. Ma solution actuelle consiste à ouvrir web.config en tant qu'objet Configuration et à modifier manuellement les sections web.config, mais je me demande s'il existe un moyen d'ajouter par programme TraceListeners au LogWriter actuellement configuré (ou à tout autre) Des classes.EntLib logging - ajouter/éditer TraceListeners à l'exécution

Des suggestions?

Répondre

2

Vous devez créer un EmailTraceListener, puis l'ajouter à la collection de TraceSources pour votre catégorie.

Dans cet exemple, j'ai un écouteur de trace de base pointant vers un fichier plat.

<add fileName="trace.log" header="----------------------------------------" 
    footer="----------------------------------------" formatter="Text Formatter" 
    listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
    traceOutputOptions="None" filter="All" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
    name="FlatFile TraceListener" /> 

Avec une source de catégorie comme suit:

<categorySources> 
     <add switchValue="All" name="General"> 
     <listeners> 
      <add name="FlatFile TraceListener" /> 
     </listeners> 
     </add> 
    </categorySources> 

Ensuite, en utilisant le code que je suis en mesure d'ajouter un EmailTraceListener à la collection TraceSources.

var emailTraceListener = new EmailTraceListener("[email protected]", "[email protected]", "Food", "Bar", 
                "smtp.foo.bar") {Name = "EmailTraceListener"}; 
    LogSource logSource; 
    Logger.Writer.TraceSources.TryGetValue("General", out logSource); 
    logSource.Listeners.Add(emailTraceListener); 


    var logEntry = new LogEntry {Message = "Test"}; 
    Logger.Write(logEntry); 

L'exécution de cet exemple, puis produira un email avec les informations logentry ainsi qu'une entrée dans le fichier journal trace.log

+0

Parfait, exactement ce que je cherchais. Merci –

+0

Donc, en ajoutant les écouteurs les ajoute à l'exécution seulement, non? Dans le cas d'une application Web ASP.NET, cela fonctionnerait-il pendant toute la durée de chaque session utilisateur? –

0

Pour activer le filtre, vous pouvez utiliser la classe LogWriter/Logger méthode GetFilter à récupérez le filtre puis manipulez-le. Par exemple, nous avons un filtre activé de journalisation dans notre configuration. Nous pouvons basculer cela par:

var filter = Logger.GetFilter<LogEnabledFilter>("<logging enabled filter name>"); 
filter.Enabled = true; // or false 

Espérons que cela aide.

+0

Essayé cela, mais le 'Logger.isLoggingEnabled()' retourne toujours la valeur initialement chargée – Legends