当把数据库建完后(如果你使用的是App_Data文件夹内的ASPNETDB.MDF数据库,那么你就不需要做这件事了),你就可以在Web.config中添加<healthMonitoring>节点了。  通过下面示例那样的配置,就可以指示健康监测系统使用“SqlWebEventProvider”日志源记录所有的错误事件和所有的程序事件。 你应该在<providers>节点内重新设置“SqlWebEventProvider”。 我使用的是默认的连接字符串(“LocalSqlServer”),如果你不想使用ASPNETDB.MDF作为你的日志数据库,那么也可以修改这个名字,改为在Web.config的<connectionStrings>节点中注册的连接字符串的名字。
<configuration>
    <system.web>
        <healthMonitoring enabled="true">
            <eventMappings>
                <clear />
                <!--记录所有错误事件-->
                <add name="All Errors" type="System.Web.Management.WebBaseErrorEvent"
                         startEventCode="0" endEventCode="2147483647" />
                <!--记录程序开始和结束事件-->
                <add name="Application Events" type="System.Web.Management.WebApplicationLifetimeEvent"
                         startEventCode="0" endEventCode="2147483647"/>
            </eventMappings>
            <providers>
                <clear />
                <add connectionStringName="SqlConnectionString" maxEventDetailsLength="1073741823"
                         buffer="false" name="SqlWebEventProvider" type="System.Web.Management.SqlWebEventProvider" />
            </providers>
            <rules>
                <clear />
                <add name="All Errors Default" eventName="All Errors" provider="SqlWebEventProvider"
                         profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:00:00" custom="" />
                <add name="Application Events Default" eventName="Application Events"
                         provider="SqlWebEventProvider" profile="Default" minInstances="1"
                         maxLimit="Infinite" minInterval="00:00:00" custom="" />
            </rules>
        </healthMonitoring>
    </system.web>
</configuration>
 
像上面这样配置完后,无论程序的开始或是停止,又或是发生了错误事件,其事件信息都会被记录到App_Data文件夹下的ASPNETDB.MDF数据库。(如果这个数据库不存在,则它会被自动地创建。)

在本文的结尾处你可以下载到一个简单的web站点程序,它演示了这个功能。 该程序包括两个网页,Default.aspx和Log.aspx。Default.aspx内有一个按钮,当点击了这个按钮后就会触发ApplicationException。 Log.aspx中使用的是GridView,DetailsView和两个SqlDataSource控件,用于显示aspnet_WebEvent_Events表中的事件信息。
上接[翻译]ASP.NET 2.0中的健康监测系统(Health Monitoring)(1) - 基本应用_NET
 
上接[翻译]ASP.NET 2.0中的健康监测系统(Health Monitoring)(1) - 基本应用_监测系统_02
 
注意,每一个事件都有与其相关联的EventCode值。 参考Erik Reitan的BLOG文章 - FAQ - Health Monitoring in ASP.NET 2.0,它里面有一个表格列出了事件代码和事件类型(当然文中还有其它有用的信息)。 (译者注:我把它转载过来,如下表所示)
InvalidEventCode
-1
UndefinedEventCode
0
UndefinedEventDetailCode
0
ApplicationCodeBase
1000
ApplicationStart
1001
ApplicationShutdown
1002
ApplicationCompilationStart
1003
ApplicationCompilationEnd
1004
ApplicationHeartbeat
1005
RequestCodeBase
2000
RequestTransactionComplete
2001
RequestTransactionAbort
2002
ErrorCodeBase
3000
RuntimeErrorRequestAbort
3001
RuntimeErrorViewStateFailure
3002
RuntimeErrorValidationFailure
3003
RuntimeErrorPostTooLarge
3004
RuntimeErrorUnhandledException
3005
WebErrorParserError
3006
WebErrorCompilationError
3007
WebErrorConfigurationError
3008
WebErrorOtherError
3009
WebErrorPropertyDeserializationError
3010
WebErrorObjectStateFormatterDeserializationError
3011
AuditCodeBase
4000
AuditFormsAuthenticationSuccess
4001
AuditMembershipAuthenticationSuccess
4002
AuditUrlAuthorizationSuccess
4003
AuditFileAuthorizationSuccess
4004
AuditFormsAuthenticationFailure
4005
AuditMembershipAuthenticationFailure
4006
AuditUrlAuthorizationFailure
4007
AuditFileAuthorizationFailure
4008
AuditInvalidViewStateFailure
4009
AuditUnhandledSecurityException
4010
AuditUnhandledAccessException
4011
MiscCodeBase
6000
WebEventProviderInformation
6001
ApplicationDetailCodeBase
50000
ApplicationShutdownUnknown
50001
ApplicationShutdownHostingEnvironment
50002
ApplicationShutdownChangeInGlobalAsax
50003
ApplicationShutdownConfigurationChange
50004
ApplicationShutdownUnloadAppDomainCalled
50005
ApplicationShutdownChangeInSecurityPolicyFile
50006
ApplicationShutdownBinDirChangeOrDirectoryRename
50007
ApplicationShutdownBrowsersDirChangeOrDirectoryRename
50008
ApplicationShutdownCodeDirChangeOrDirectoryRename
50009
ApplicationShutdownResourcesDirChangeOrDirectoryRename
50010
ApplicationShutdownIdleTimeout
50011
ApplicationShutdownPhysicalApplicationPathChanged
50012
ApplicationShutdownHttpRuntimeClose
50013
ApplicationShutdownInitializationError
50014
ApplicationShutdownMaxRecompilationsReached
50015
StateServerConnectionError
50016
AuditDetailCodeBase
50200
InvalidTicketFailure
50201
ExpiredTicketFailure
50202
InvalidViewStateMac
50203
InvalidViewState
50204
WebEventDetailCodeBase
50300
SqlProviderEventsDropped
50301
WebExtendedBase
100000


结论
ASP.NET 2.0内置的健康监测系统可以非常容易地使指定的事件自动地记录到指定的日志源。 本文中,我们研究了两种内置日志源:“EventLogProvider”和“SqlWebEventProvider”,它们会分别记录事件信息到Windows的事件日志中和SQL Server数据库的一个表里。 健康监测系统可以捕获自定义事件,也可以使用其它日志源。 在后面的文章中,我们将会看到更多的日志源,甚至是创建我们自己的日志源。 我们也会知道如何创建自己的事件,以及如何自动地触发一个事件。 

到这里本文结束。祝编程愉快!