How to write just message to debug output with Enterprise Library Logging?

前端 未结 2 776
北海茫月
北海茫月 2021-02-05 15:04

I want to implement logging with EntLib Logging and hook up two TraceListeners for category \"Debugging\". One will write those messages to file and other will output them to sy

相关标签:
2条回答
  • 2021-02-05 15:46

    In the EntLib configuration for your app you specify which Formatter you wish to use. The default formatter includes all this information. To remove the information you are not interested either remove them from the TextFormatter you are currently using or create a new text formatter containing the fields you want and change "Debugging" to use your new formatter.

    0 讨论(0)
  • 2021-02-05 15:48

    I found a nice walkthrough on MSDN: Creating a Custom Trace Listener

    It does exactly what I need. Here is a full code I ended up with:

    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);
            }
    
        }
    }
    

    Configuration file:

    <?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>
    

    And the usage goes like this:

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

    Both end up in debug output easily traceable by DbgView.

    0 讨论(0)
提交回复
热议问题