2016-12-12 1 views
0

Dans notre système, nous utilisons simultanément Trace.Write() (ancienne méthode) et la journalisation via log4net.log4net - TraceListener & TraceAppender - mélange de deux méthodes de journalisation

Je veux unifier ces méthodes. J'ai ajouté un écouteur personnalisé appelé Log4NetTraceListener, qui gère les messages de Trace et les place dans un fichier journal. Code simplifié:

public class Log4NetTraceListener : System.Diagnostics.TraceListener 
{ 
public override void Write(string message) 
{ 
      _log.Debug(message); 
} 

Il fonctionne très bien, mais ce que je veux faire aussi se connecte à la fenêtre de sortie de Visual Studio, même pour les méthodes régulières de log4net..

Ma première idée était d'ajouter TraceAppender à la configuration de log4net. Cela fonctionnerait bien, mais en interaction avec l'auditeur, cela provoque une boucle sans fin.

Y a-t-il un moyen "propre" de gérer un tel problème? Peut-être un peu de filtrage de l'auditeur ou de l'appender?

+0

Vous ne pouvez pas simplement ajouter un DebugAppender à la configuration log4net? – thudbutt

Répondre

0

En supposant que tous les Trace.Write() appels passent par la classe Log4NetTraceListener et que le reste de votre exploitation forestière log4net ne pas (il est tout à fait normal .Debug(), .Error() appels), vous pouvez configurer votre hiérarchie de journalisation afin que les Trace.Write() appels ne se terminent pas jusqu'à appeler le TraceAppender. par exemple.

<log4net> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] - %message%newline"/> 
    </layout> 
    </appender> 
    <root> 
    <level value="ALL" /> 
    <appender-ref ref="TraceAppender" /> 
    </root> 
    <logger name="Log4NetTraceListener"> 
    <level value="OFF" /> 
    </logger> 
</log4net> 

Cela fait l'hypothèse que le champ _log dans Log4NetTraceListener a reçu un nom d'enregistreur de Log4NetTraceListener.

Alternativement, si vous utilisez le DebugAppender au lieu de TraceAppender, il sera, tout débogage, sortie à la fenêtre de sortie de Visual Studio.