Enterprise Library Exception Handling 6.0 XML Logging not writing File

user2896050 picture user2896050 · Nov 16, 2013 · Viewed 7.3k times · Source

I'm trying to setup the Enterprise Library Exception Handling 6.0 to log errors using the XmlExceptionFormatter in the Enterprise Library Logging Application Block. I'm not receiving any errors, and I can get the Logging to work by itself.

Here is my App.config from the console application I'm testing from:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="loggingConfiguration" 
             type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
    <section name="exceptionHandling" 
             type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
  </configSections>

  <loggingConfiguration name="Logging Application Block" 
                        tracingEnabled="false" 
                        defaultCategory="General" 
                        logWarningsWhenNoCategoriesMatch="true">
    <listeners>
      <add name="XML Trace Listener" 
           type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.XmlTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
           listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.XmlTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
           fileName="C:\logs\TestDriver-XML.log" 
           traceOutputOptions="None" />
    </listeners>
    <categorySources>
      <add switchValue="All" name="General">
        <listeners>
          <add name="XML Trace Listener" />
        </listeners>
      </add>
    </categorySources>
    <specialSources>
      <allEvents switchValue="All" name="All Events">
        <listeners>
          <add name="XML Trace Listener" />
        </listeners>
      </allEvents>
      <notProcessed switchValue="All" name="Unprocessed Category">
        <listeners>
          <add name="XML Trace Listener" />
        </listeners>
      </notProcessed>
      <errors switchValue="All" name="Logging Errors &amp; Warnings">
        <listeners>
          <add name="XML Trace Listener" />
        </listeners>
      </errors>
    </specialSources>
  </loggingConfiguration>

  <exceptionHandling>
    <exceptionPolicies>
      <add name="Policy">
        <exceptionTypes>
          <add name="All Exceptions" 
               type="System.Exception, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
               postHandlingAction="None">
            <exceptionHandlers>
              <add name="Logging Exception Handler" 
                   type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                   logCategory="General" 
                   eventId="100" 
                   severity="Error" 
                   title="Enterprise Library Exception Handling"
                   formatterType="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.XmlExceptionFormatter, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                   priority="0" />
            </exceptionHandlers>
          </add>
        </exceptionTypes>
      </add>
    </exceptionPolicies>
  </exceptionHandling>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

My test is:

class Program
{
    public static void Main(string[] args)
    {
        TestExceptionManager();

        Console.ReadLine();
    }

    private static void TestExceptionManager()
    {
        ExceptionManager exceptionManager = new ExceptionManager();
        exceptionManager.Process(MyExceptionCode, "Policy");
    }

    private static void MyExceptionCode()
    {
        throw new Exception("A basic Exception");
    }
}

Any suggestions to get this to log correctly?

Answer

Josh picture Josh · Nov 17, 2013

In version 6 you need to use the factory method, updated example:

using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling;
using Microsoft.Practices.EnterpriseLibrary.Logging;
using System;

namespace ExceptionHandlingExamples
{
    class Program
    {
        public static void Main(string[] args)
        {
            try
            {
                TestExceptionManager();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            Console.ReadLine();
        }

        private static void TestExceptionManager()
        {
            IConfigurationSource config = ConfigurationSourceFactory.Create();
            ExceptionPolicyFactory factory = new ExceptionPolicyFactory(config);
            Logger.SetLogWriter(new LogWriterFactory().Create());

            ExceptionManager exceptionManager = factory.CreateManager();

            exceptionManager.Process(MyExceptionCode, "Policy");
        }

        private static void MyExceptionCode()
        {
            throw new Exception("A basic Exception");
        }
    }
}