NetTiers 生成完毕后,Service层会使用logging记录异常日志
但是在默认情况下, 被捕获的异常没有被抛出, 下面是通过修改
entlib.config 实现, rethrow Exception.
<configuration>
<exceptionHandling>
<exceptionPolicies>
<add name="NoneExceptionPolicy">
<exceptionTypes>
<add type="System.Exception, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
postHandlingAction="NotifyRethrow" name="Exception">
<exceptionHandlers>
<add logCategory="Exceptions" eventId="100" severity="Error"
title="TiannuoSA Exception Handling" formatterType="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.XmlExceptionFormatter, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
priority="0" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
name="Logging Handler" />
</exceptionHandlers>
</add>
</exceptionTypes>
</add>
</exceptionPolicies>
</exceptionHandling>
</configuration>
<exceptionHandling>
<exceptionPolicies>
<add name="NoneExceptionPolicy">
<exceptionTypes>
<add type="System.Exception, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
postHandlingAction="NotifyRethrow" name="Exception">
<exceptionHandlers>
<add logCategory="Exceptions" eventId="100" severity="Error"
title="TiannuoSA Exception Handling" formatterType="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.XmlExceptionFormatter, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
priority="0" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
name="Logging Handler" />
</exceptionHandlers>
</add>
</exceptionTypes>
</add>
</exceptionPolicies>
</exceptionHandling>
</configuration>
关键部分 postHandlingAction="NotifyRethrow"
完整的xml如下
1
<configuration>2
<configSections>3
<section name="securityConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Security.Configuration.SecuritySettings, Microsoft.Practices.EnterpriseLibrary.Security, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />4
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />5
<section name="exceptionHandling" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />6
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />7
<section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />8
<section name="netTiersService" type="Moda.Application.Data.Bases.NetTiersServiceSection, Moda.Application.Data" allowDefinition="MachineToApplication" restartOnExternalChanges="true" />9
</configSections>10
<securityConfiguration defaultAuthorizationInstance="NetTiers.RuleProvider"11
defaultSecurityCacheInstance="">12
<authorizationProviders>13
<add type="Microsoft.Practices.EnterpriseLibrary.Security.AuthorizationRuleProvider, Microsoft.Practices.EnterpriseLibrary.Security, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"14
name="NetTiers.RuleProvider" />15
</authorizationProviders>16
<securityCacheProviders>17
<add cacheManagerInstanceName="TiannuoSA.Entities.EntityCache"18
defaultSlidingSessionExpirationInMinutes="10" defaultAbsoluteSessionExpirationInMinutes="60"19
type="Microsoft.Practices.EnterpriseLibrary.Security.Cache.CachingStore.CachingStoreProvider, Microsoft.Practices.EnterpriseLibrary.Security.Cache.CachingStore, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"20
name="Caching Store Provider" />21
</securityCacheProviders>22
</securityConfiguration>23
<loggingConfiguration name="Logging Application Block" tracingEnabled="true"24
defaultCategory="General" logWarningsWhenNoCategoriesMatch="true">25
<listeners>26
<add fileName="TiannuoSA.log.exclude" header="----------------------------------------"27
footer="----------------------------------------" formatter=""28
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"29
traceOutputOptions="None" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"30
name="FlatFile TraceListener" />31

32
<add databaseInstanceName="TiannuoSA.Data.ConnectionString" writeLogStoredProcName="usp_writelogtodatabase" 33
addCategoryStoredProcName="usp_addcategory" formatter="Text Formatter"34
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Database.Configuration.FormattedDatabaseTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 35
traceOutputOptions="None" type="Microsoft.Practices.EnterpriseLibrary.Logging.Database.FormattedDatabaseTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"36
name="Database Trace Listener" />37

38
</listeners>39
<formatters>40
<add template="Timestamp: {timestamp} Message: {message} Category: {category} Priority: {priority} EventId: {eventid} Severity: {severity} Title:{title} Machine: {machine} Application Domain: {appDomain} Process Id: {processId} Process Name: {processName} Win32 Thread Id: {win32ThreadId} Thread Name: {threadName} Extended Properties: {dictionary({key} - {value} )}"41
type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"42
name="Text Formatter" />43
</formatters>44
<categorySources>45
<add switchValue="Error" name="Exceptions">46
<listeners>47
<add name="Database Trace Listener" />48
<add name="FlatFile TraceListener" />49
</listeners>50
</add>51
<add switchValue="All" name="General">52
<listeners>53
<add name="Database Trace Listener" />54
<add name="FlatFile TraceListener" />55
</listeners>56
</add>57
</categorySources>58
<specialSources>59
<allEvents switchValue="All" name="All Events" />60
<notProcessed switchValue="All" name="Unprocessed Category" />61
<errors switchValue="All" name="Logging Errors & Warnings">62
<listeners>63
<add name="FlatFile TraceListener" />64
<add name="Database Trace Listener" />65
</listeners>66
</errors>67
</specialSources>68
</loggingConfiguration>69
<exceptionHandling>70
<exceptionPolicies>71
<add name="NoneExceptionPolicy">72
<exceptionTypes>73
<add type="System.Exception, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"74
postHandlingAction="NotifyRethrow" name="Exception">75
<exceptionHandlers>76
<add logCategory="Exceptions" eventId="100" severity="Error"77
title="TiannuoSA Exception Handling" formatterType="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.XmlExceptionFormatter, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"78
priority="0" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"79
name="Logging Handler" />80
</exceptionHandlers>81
</add>82
</exceptionTypes>83
</add>84
</exceptionPolicies>85
</exceptionHandling>86
<cachingConfiguration defaultCacheManager="TiannuoSA.Entities.EntityCache">87
<cacheManagers>88
<add expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000"89
numberToRemoveWhenScavenging="10" backingStoreName="Null Storage"90
name="TiannuoSA.Entities.EntityCache" />91
</cacheManagers>92
<backingStores>93
<add encryptionProviderName="" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"94
name="Null Storage" />95
</backingStores>96
</cachingConfiguration>97
<dataConfiguration defaultDatabase="TiannuoSA.Data.ConnectionString" />98
<connectionStrings>99
<add name="TiannuoSA.Data.ConnectionString" connectionString="User ID=;Initial Catalog=;Data Source=;password=" providerName="System.Data.SqlClient" />100
</connectionStrings>101

102
</configuration>103

本文介绍如何配置Enterprise Library来处理.NET应用中的异常,并通过修改entlib.config文件实现异常的日志记录与重抛。这有助于确保异常不仅被记录下来,同时也能够被上层调用者捕获。

124

被折叠的 条评论
为什么被折叠?



