Comment écrire juste un message pour déboguer la sortie avec l'Enregistrement de bibliothèque d'entreprise?

StackOverflow https://stackoverflow.com/questions/1011106

  •  06-07-2019
  •  | 
  •  

Question

Je souhaite implémenter la journalisation avec EntLib Logging et connecter deux TraceListeners pour la catégorie "Débogage". On écrira ces messages dans un fichier et les autres dans la sortie de trace système de la même manière que Debug.Write (pour que je puisse les surveiller avec Sysinternals DbgView), mais je ne trouve pas comment configurer ce second écouteur avec le formateur J'ai besoin. Tout ce dont j’ai besoin, c’est juste un message, mais cela produit un tas de choses, comme EventId, Priority, etc.

Était-ce utile?

La solution

J'ai trouvé une solution pas à pas sur MSDN: Création d'un écouteur de trace personnalisé

Il fait exactement ce dont j'ai besoin. Voici un code complet je me suis retrouvé avec:

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;

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

        public override void Write(string message)
        {
            Debug.Write(message);
        }

        public override void WriteLine(string message)
        {
            Debug.WriteLine(message);
        }

    }
}

Fichier de configuration:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </configSections>
  <loggingConfiguration name="Logging Application Block" tracingEnabled="true"
    defaultCategory="General" logWarningsWhenNoCategoriesMatch="true">
    <listeners>
      <add listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.CustomTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
        traceOutputOptions="None" type="Common.Utils.FormattedDebugWriterTraceListener, Common.Utils"
        name="FormattedDebugWriterTraceListener" initializeData="" formatter="SimpleMessageFormatter" />
      <add fileName="log\Debugging.log" rollSizeKB="0" timeStampPattern="yyyy-MM-dd"
        rollFileExistsBehavior="Overwrite" rollInterval="Week" formatter="GeneralTextFormatter"
        header="----------------------------------------" footer="----------------------------------------"
        listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
        traceOutputOptions="None" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
        name="RollingFlatFileTraceListener" />
    </listeners>
    <formatters>
      <add template="{message}&#xD;&#xA;" type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
        name="SimpleMessageFormatter" />
      <add template="Timestamp: {timestamp}&#xD;&#xA;Message: {message}&#xD;&#xA;Category: {category}&#xD;&#xA;Priority: {priority}&#xD;&#xA;EventId: {eventid}&#xD;&#xA;Severity: {severity}&#xD;&#xA;Title:{title}&#xD;&#xA;Machine: {machine}&#xD;&#xA;Application Domain: {appDomain}&#xD;&#xA;Process Id: {processId}&#xD;&#xA;Process Name: {processName}&#xD;&#xA;Win32 Thread Id: {win32ThreadId}&#xD;&#xA;Thread Name: {threadName}&#xD;&#xA;Extended Properties: {dictionary({key} - {value}&#xD;&#xA;)}"
        type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
        name="GeneralTextFormatter" />
    </formatters>
    <categorySources>
      <add switchValue="All" name="Debugging">
        <listeners>
          <add name="FormattedDebugWriterTraceListener" />
          <add name="RollingFlatFileTraceListener" />
        </listeners>
      </add>
      <add switchValue="All" name="General" />
    </categorySources>
    <specialSources>
      <allEvents switchValue="All" name="All Events" />
      <notProcessed switchValue="All" name="Unprocessed Category" />
      <errors switchValue="All" name="Logging Errors &amp; Warnings" />
    </specialSources>
  </loggingConfiguration>
</configuration>

Et l'utilisation va comme ceci:

Debug.Write("Debug.Write test");
Logger.Write("EntLib test", "Debugging");

Les deux se retrouvent dans une sortie de débogage facilement traçable par DbgView.

Autres conseils

Dans la configuration EntLib de votre application, vous spécifiez le formateur que vous souhaitez utiliser. Le formateur par défaut inclut toutes ces informations. Pour supprimer les informations qui ne vous intéressent pas, supprimez-les de l'outil TextFormatter que vous utilisez actuellement ou créez un nouveau formateur de texte contenant les champs souhaités et modifiez le champ "Débogage". utiliser votre nouveau formateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top