2010-08-09 5 views
4

Je dois effectuer une journalisation sur la console (ou débogage/trace). Actuellement, j'utilise Ent Lib 4.1 Logging Application Block. Pour me connecter à la console, j'utilise SystemDiagnosticsTraceListenerData et System.Diagnostics.ConsoleTraceListener.Mise en forme de la journalisation pour SystemDiagnosticsTraceListenerData écouteur du bloc d'application de journalisation

Il effectue une journalisation sur la console, mais je ne suis pas en mesure d'utiliser le formatage pour ce type de lister et ne peux donc pas formater les entrées de journal au format souhaité. Ce dont j'ai besoin est juste un message de log, sans avoir toutes les informations supplémentaires qui sont fournies par défaut (ce qui rend les journaux moins lisibles pour mon cas).

Existe-t-il une option de configuration qui me manque pour activer la mise en forme de SystemDiagnosticsTraceListener?

Répondre

0

Je ne sais pas si cela aide (puisque vous utilisez LAB), mais Ukadc.Diagnostics est un ensemble d'extensions System.Diagnostics. Un ajout majeur (par rapport à System.Diagnostics) est l'ajout de la possibilité de formater la sortie de journalisation, similaire à ce qui peut être accompli avec Log4net, NLog et LAB. Vous pouvez même étendre la capacité de formatage en écrivant vos propres "jetons". Les jetons sont des objets appelés par les TraceListeners personnalisés fournis par Ukadc.Diagnostics pour obtenir les informations à consigner (avec le message de journal lui-même). Par exemple, j'ai écrit un objet pour calculer le delta temporel en millisecondes depuis le début du processus. Si j'inclue le jeton correspondant dans l'instruction de format, chaque message de journal inclura ce delta.

Voir ces liens:

Ukadc.Diagnostics on codeplex

The developer's blog

8

Une façon d'y arriver est de créer un TraceListener personnalisé. Ensuite, dans le fichier app.config, définissez le paramètre listnerDataType sur CustomTraceListenerData. Cela permet à ConsoleTraceListener d'avoir une sortie formatée. La sortie a été formatée comme prévu. Sans le formateur, toutes les valeurs ont été renvoyées. Le journal TraceListener personnalisé et le fichier app.config sont tous deux attachés.

Le code utilise 5.0.505.0 au lieu de 4.1 comme posé par la question originale.

Ce code a été pris à partir de ce site: java2s firstbricks » FirstBricks » EntLib » Logging » Extensions » ConsoleTraceListener.cs (cache). Les commentaires ont été supprimés pour rendre le code plus facile à lire sur StackOverflow et la couleur par défaut est passée du blanc au gris.

namespace Eab.Logging 
{ 
    using System; 
    using System.Diagnostics; 
    using Microsoft.Practices.EnterpriseLibrary.Common.Configuration; 
    using Microsoft.Practices.EnterpriseLibrary.Logging; 
    using Microsoft.Practices.EnterpriseLibrary.Logging.Configuration; 
    using Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners; 

    [ConfigurationElementType(typeof(CustomTraceListenerData))] 
    public class ConsoleTraceListener : CustomTraceListener 
    { 
     public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data) 
     { 
      if (data is LogEntry && Formatter != null) { 
       LogEntry le = (LogEntry)data; 
       WriteLine(Formatter.Format(le), le.Severity); 
      } else { 
       WriteLine(data.ToString()); 
      } 
     } 

     public override void Write(string message) 
     { 
      Console.ForegroundColor = ConsoleColor.Gray; 
      Console.Write(message); 
     } 

     public override void WriteLine(string message) 
     { 
      Console.ForegroundColor = ConsoleColor.Gray; 
      Console.WriteLine(message); 
     } 

     public void WriteLine(string message, TraceEventType severity) 
     { 
      ConsoleColor color; 
      switch (severity) { 
       case TraceEventType.Critical: 
       case TraceEventType.Error: 
        color = ConsoleColor.Red; 
        break; 
       case TraceEventType.Warning: 
        color = ConsoleColor.Yellow; 
        break; 
       case TraceEventType.Information: 
        color = ConsoleColor.Cyan; 
        break; 
       case TraceEventType.Verbose: 
       default: 
        color = ConsoleColor.Gray; 
        break; 
      } 

      Console.ForegroundColor = color; 
      Console.WriteLine(message); 
     } 
    } 
} 

<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General"> 
    <listeners> 
       <!-- Namespace+class, applicationName -->  
     <add 
      type="Eab.Logging.ConsoleTraceListener, Eab.Logging" 
      listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.CustomTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
      formatter="Simple Formatter" 
      name="Console Listener" /> 
    </listeners> 
    <formatters> 
     <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
      template="{timestamp(local:[MM/dd/yyyy HH:mm:ss.fff])} : ({title}) {message}" 
      name="Simple Formatter" /> 
    </formatters> 
    <categorySources> 
     <add switchValue="All" name="General"> 
     <listeners> 
      <add name="Console Listener" /> 
     </listeners> 
     </add> 
    </categorySources> 
    <specialSources> 
     <notProcessed switchValue="All" name="Unprocessed Category"> 
     <listeners> 
      <add name="Console Listener" /> 
     </listeners> 
     </notProcessed> 
     <errors switchValue="All" name="Logging Errors &amp; Warnings"> 
     <listeners> 
      <add name="Console Listener" /> 
     </listeners> 
     </errors> 
    </specialSources> 
    </loggingConfiguration> 
Questions connexes