在开发Web应用程序时,异常处理和日志记录是两个非常重要的方面。良好的异常处理可以提高应用程序的稳定性和用户体验,而有效的日志记录则有助于开发者快速定位和解决问题。本文将介绍如何使用开源日志记录工具Elmah在ASP.NET应用程序中进行异常日志记录。
Elmah(Error Logging Modules and Handlers)是一个开源的日志记录工具,它可以将应用程序中的异常信息记录到一个中心仓库,并可以将异常通知发送给特定的人员。在开始使用Elmah之前,需要做一些准备工作,例如从官方网站下载Elmah的源代码,并在Microsoft SQL Server中创建一个名为Elmah_Errorlog的数据库。
首先,需要创建一个数据库来存储Elmah的日志信息。在SQL Server中创建数据库后,需要创建一些表和存储过程来支持Elmah的日志记录功能。以下是创建Elmah_Errorlog数据库所需的SQL脚本:
CREATE TABLE [dbo].[ELMAH_Error](........)
CREATE PROCEDURE [dbo].[ELMAH_GetErrorXml](.........)
CREATE PROCEDURE [dbo].[ELMAH_GetErrorsXml](.......)
CREATE PROCEDURE [dbo].[ELMAH_LogError](........
创建完数据库和存储过程后,数据库的结构将如下所示:
接下来,将创建一个测试项目来展示如何使用Elmah记录异常。在Elmah解决方案中,创建了一个名为Elmah-TestHarness的Web项目,这是一个简单的ASP.NETWeb应用程序,只包含一个Default.aspx页面。将Elmah项目作为引用添加到这个测试项目中,以便使用Elmah.dll。
为了使用Elmah,需要修改Elmah-TestHarness项目的Web.Config文件。以下是Web.Config文件的配置内容:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
</sectionGroup>
</configSections>
<connectionStrings>
<add name="elmah-express" connectionString="Server=KAZOL-PC\SQLEXPRESS08; Database=Elmah_Errorlog;Trusted_Connection=Yes;" />
</connectionStrings>
<elmah>
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah-express" />
<errorFilter>
<test>
<equal binding="HttpStatusCode" value="404" valueType="Int32" />
</test>
</errorFilter>
</elmah>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpHandlers>
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<httpModules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
</httpModules>
</system.web>
</configuration>
配置完Web.Config文件后,可以在Default.aspx页面中添加一个按钮来测试异常记录功能。以下是Default.aspx页面的代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Elmah_TestHarness._Default" %>
<html>
<head>
<title>Elmah - Test Harness</title>
</head>
<body>
<form id="frmMain" runat="server">
<h1>Elmah Test Harness</h1>
<fieldset>
<legend>Elmah Test harness controls</legend>
<asp:Button ID="btnTest" runat="server" OnClick="btnTest_Click" Text="Exception Test" />
</fieldset>
</form>
</body>
</html>
Default.aspx页面的代码后台如下:
namespace Elmah_TestHarness
{
using System;
public partial class _Default : System.Web.UI.Page
{
protected void btnTest_Click(object sender, EventArgs e)
{
throw new Exception("test");
}
}
}