利用微软企业库轻松给你的WPF程序加上异常处理和日志记录

拦截异常并用企业库处理:

 

private void AttachUnhandledException()

        {
    //这个异常一样要加,否则如果后台线程发生异常,DispatherUnhandledException是扑捉不到的。

            AppDomain.CurrentDomain.UnhandledException += (sender, args) =>

            {

                Exception ex = new Exception(String.Format(LanguageReader.GetValue("ApplicationMultiThreadError"), args.ExceptionObject));

                HandleException(ex);

            };



            this.DispatcherUnhandledException += (sender, args) =>

            {

#if !DEBUG

                args.Handled = true;

#endif

                HandleException(args.Exception);

            };

        }



        private void HandleException(Exception ex)

        {

            ExceptionPolicy.HandleException(ex, "Unhandled Exception Policy");

#if !DEBUG

            string errorMessage = ex.InnerException == null ? ex.Message : ex.InnerException.Message;

            var result = MessageBox.Show(LanguageReader.GetValue("ApplicationErrorInfo"), LanguageReader.GetValue("ApplicationErrorTitle"), MessageBoxButton.YesNo,

                MessageBoxImage.Error, MessageBoxResult.Yes, MessageBoxOptions.DefaultDesktopOnly);

            if (result == MessageBoxResult.Yes)

            {

                if (Thread.CurrentThread.ManagedThreadId == App.Current.Dispatcher.Thread.ManagedThreadId)

                    Shutdown();

                else

                    Process.GetCurrentProcess().Kill();

            }

#endif

        }

配置企业库:

首先是App.config

 

 

<configuration>

  <configSections>

    <section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

    <section name="modules" type="Luna.WPF.ApplicationFramework.Modularity.ModulesConfigurationSection, Luna.WPF.ApplicationFramework" />

  </configSections>

  <enterpriseLibrary.ConfigurationSource selectedSource="File Configuration Source">

    <sources>

      <add name="File Configuration Source" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"

        filePath="EnterpriseLibrary.config" />

    </sources>

  </enterpriseLibrary.ConfigurationSource>

</configuration>

最后是EnterpriseLibrary.config

 

<configuration>

  <configSections>

    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

    <section name="exceptionHandling" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

    <section name="securityCryptographyConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.Configuration.CryptographySettings, Microsoft.Practices.EnterpriseLibrary.Security.Cryptography, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

  </configSections>

  <loggingConfiguration name="Logging Application Block" tracingEnabled="true"

    defaultCategory="General" logWarningsWhenNoCategoriesMatch="true">

    <listeners>

      <add fileName="trace.log" header="----------------------------------------"

        footer="----------------------------------------" formatter="Text Formatter"

        listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"

        traceOutputOptions="LogicalOperationStack" filter="All" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"

        name="FlatFile TraceListener" />

    </listeners>

    <formatters>

      <add template="Message: {message}" type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"

        name="Text Formatter" />

    </formatters>

    <categorySources>

      <add switchValue="All" name="General">

        <listeners>

          <add name="FlatFile TraceListener" />

        </listeners>

      </add>

    </categorySources>

    <specialSources>

      <allEvents switchValue="All" name="All Events" />

      <notProcessed switchValue="All" name="Unprocessed Category" />

      <errors switchValue="All" name="Logging Errors & Warnings" />

    </specialSources>

  </loggingConfiguration>

  <exceptionHandling>

    <exceptionPolicies>

      <add name="Unhandled Exception Policy">

        <exceptionTypes>

          <add type="System.Exception, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

            postHandlingAction="None" name="Exception">

            <exceptionHandlers>

              <add logCategory="General" eventId="100" severity="Error" title="Enterprise Library Exception Handling"

                formatterType="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.TextExceptionFormatter, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"

                priority="0" useDefaultLogger="true" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"

                name="Logging Handler" />

            </exceptionHandlers>

          </add>

        </exceptionTypes>

      </add>

    </exceptionPolicies>

  </exceptionHandling>

  <securityCryptographyConfiguration>

    <hashProviders>

      <add algorithmType="System.Security.Cryptography.SHA512Managed, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

        saltEnabled="true" type="Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.HashAlgorithmProvider, Microsoft.Practices.EnterpriseLibrary.Security.Cryptography, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"

        name="SHA512Managed" />

    </hashProviders>

  </securityCryptographyConfiguration>

</configuration>

 

 

你可能感兴趣的:(异常处理)