企业库异常处理6.0 XML日志记录不写文件

时间:2013-11-15 23:06:05

标签: c# .net exception-handling enterprise-library enterprise-library-6

我正在尝试使用Enterprise Library Logging Application Block中的XmlExceptionFormatter设置Enterprise Library Exception Handling 6.0来记录错误。我没有收到任何错误,我可以让Logging自行工作。

以下是我正在测试的控制台应用程序中的App.config:

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

我的测试是:

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

有任何建议可以正确记录吗?

1 个答案:

答案 0 :(得分:4)

在版本6中,您需要使用工厂方法,更新示例:

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