2017-05-21 5 views
0

Je viens de configurer mon projet pour utiliser TraceSource/TraceListener et ajouté un écouteur par défaut pour consigner les données dans la fenêtre de sortie en utilisant new ConsoleTraceListener(). Je reçois beaucoup de préfixes junky avec chaque ligne. Est-il un moyen d'empêcher cela?Empêcher le préfixe junky fourni avec TraceSource dans .NET

FluentFTP Verbose: 0 : InterNetwork: 123.123.123.123 
FluentFTP Verbose: 0 : 421 Too many connections (8) from this IP 
FluentFTP Verbose: 0 : Disposing FtpClient object... 
FluentFTP Information: 0 : QUIT 

Je voudrais simplement la chaîne que je trace:

InterNetwork: 123.123.123.123 
421 Too many connections (8) from this IP 
Disposing FtpClient object... 
QUIT 

La syntaxe J'utilise est:

private static readonly TraceSource m_traceSource = new TraceSource("FluentFTP") { 
    Switch = new SourceSwitch("sourceSwitch", "Verbose") { Level = SourceLevels.All } 
}; 
... 
m_traceSource.TraceEvent(TraceLevelTranslation(eventType), 0, message); 

Edit: Il y a des réponses à cette question here , here et here, mais aucun d'entre eux ne couvre le cas d'utilisation où vous ne pouvez pas modifier le TraceListener, seulement le TraceSource.

+0

double possible de [en-têtes de TraceListener et pieds de page] (http: // stackoverflow. com/questions/12685581/tracelistener-headers-and-footers) – apocalypse

Répondre

1

Je fais quelque chose comme ça en écrivant explicitement aux écouteurs de la source de trace ... et en n'appelant pas TraceEvent. Si vous êtes prêt à le faire, vous pouvez faire quelque chose comme la méthode d'extension suivante. Notez qu'il doit manger toutes les exceptions lancées par les auditeurs de traces:

static object traceSync = new object(); 
static int traceMessageNumber; 
internal static void Emit(this TraceSource traceSource, TraceEventType eventType, string message, params object[ ] args) 
{ 
    try 
    { 
    lock (traceSync) 
    { 
     var msgNum = Interlocked.Increment(ref traceMessageNumber); 

     if (traceSource.Switch.ShouldTrace(eventType)) 
     { 
     //--> format your message like you want... 
     var msg = YourMessageFormatter(msgNum, message, args); 

     foreach (TraceListener listener in traceSource.Listeners) 
     { 
      try 
      { 
      listener.WriteLine(msg); 
      listener.Flush(); 
      } 
      catch { } 
     } 
     } 
    } 
    } 
    catch 
    { 
    //--> maybe we'll write an event log entry? 
    } 
} 

Ensuite, vous pouvez l'appeler avec:

m_TraceSource.Emit(TraceLevelTranslation(eventType), message); 
+0

Merci! Résolu mon problème ... –