Elmah使用方法

ELMAH(Error Logging Modules and Handlers for ASP.NET )是一款ASP.NET下的系统错误记录管理工具,它可以非常方便的把“黄屏”错误记录到XML,MS SQLServer,SQLite,MySql等文件中,甚至它还可以发送邮件。

这里我就记一下使用它的方法。本文以记录到MS SQL Server 2005为例:

1. 下载ELMAH

   ELMAH官方地址:http://code.google.com/p/elmah/ 
         版本:ELMAH-1.0-BETA2-bin.zip

2.把dll文件复制到项目的bin目录下。

   DLL文件:Elmah.dll 
         版本:1.0.9414.1441 
         大小:114688 bytes ( 112.000 KB,  0.109 MB )

 3.设置Web.config

<xml version="1.0" encoding="utf-8"?>

 <configuration>

    <configSections>

 

      <sectionGroup name="elmah">

        <section name="security" type="Elmah.SecuritySectionHandler, Elmah"/>

        <section name="errorLog" type="Elmah.ErrorLogSectionHandler, Elmah"/>

        <section name="errorMail" type="Elmah.ErrorMailSectionHandler, Elmah"/>

        <section name="errorFilter" type="Elmah.ErrorFilterSectionHandler, Elmah"/>

      </sectionGroup>

    </configSections>

    <elmah>

      <security allowRemoteAccess="0" />

      <errorLog type="Elmah.SqlErrorLog, Elmah"

              connectionStringName="ConnectionString" />

    </elmah>

 

    <location path="elmah.axd">

      <system.web>

        <authorization>

          <deny users="?"/>

          <allow users="Admin"/>

        </authorization>

      </system.web>

    </location>

 

    <appSettings />

 

    <connectionStrings>

      <add name="ConnectionString" connectionString="Data Source=qq\SQLEXPRESS;Initial Catalog=xx;User ID=xx;Password=xx" providerName="System.Data.SqlClient" />

    </connectionStrings>

    <system.web>

      <httpHandlers>

        <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah"/>

      </httpHandlers>

      <httpModules>

        <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>

      </httpModules>

      <compilation debug="true" />

      <authentication mode="Forms">

        <forms loginUrl="login.aspx" name=".ASPXAUTH">

        </forms>

      </authentication>

      <authorization>

        <deny users="*"/>

      </authorization>

 

    </system.web>

 </configuration>

 

 4.向数据添加表

/* 错误管理工具 SQL代码             */

CREATE TABLE dbo.ELMAH_Error

(

    ErrorId     UNIQUEIDENTIFIER NOT NULL,

    Application NVARCHAR(60) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

    Host        NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

    Type        NVARCHAR(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

    Source      NVARCHAR(60) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

    Message     NVARCHAR(500) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

    [User]      NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

    StatusCode INT NOT NULL,

    TimeUtc     DATETIME NOT NULL,

    Sequence    INT IDENTITY (1, 1) NOT NULL,

    AllXml      NTEXT COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

 

ALTER TABLE dbo.ELMAH_Error WITH NOCHECK ADD

    CONSTRAINT PK_ELMAH_Error PRIMARY KEY NONCLUSTERED

    (

        ErrorId

    ) ON [PRIMARY]

GO

 

ALTER TABLE dbo.ELMAH_Error ADD

    CONSTRAINT DF_ELMAH_Error_ErrorId DEFAULT (newid()) FOR [ErrorId]

GO

 

CREATE NONCLUSTERED INDEX IX_ELMAH_Error_App_Time_Seq ON dbo.ELMAH_Error

(

    [Application] ASC,

    [TimeUtc] DESC,

    [Sequence] DESC

) ON [PRIMARY]

GO

 

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_NULLS ON

GO

 

CREATE PROCEDURE dbo.ELMAH_GetErrorXml

(

    @Application NVARCHAR(60),

    @ErrorId UNIQUEIDENTIFIER

)

AS

 

SET NOCOUNT ON

 

SELECT

    AllXml

FROM

    ELMAH_Error

WHERE

    ErrorId = @ErrorId

AND

    Application = @Application

 

 

 

GO

SET QUOTED_IDENTIFIER OFF

GO

SET ANSI_NULLS ON

GO

 

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_NULLS ON

GO

 

CREATE PROCEDURE dbo.ELMAH_GetErrorsXml

(

    @Application NVARCHAR(60),

    @PageIndex INT = 0,

    @PageSize INT = 15,

    @TotalCount INT OUTPUT

)

AS

 

SET NOCOUNT ON

 

DECLARE @FirstTimeUTC DateTime

DECLARE @FirstSequence int

DECLARE @StartRow int

DECLARE @StartRowIndex int

 

-- Get the ID of the first error for the requested page

 

SET @StartRowIndex = @PageIndex * @PageSize + 1

SET ROWCOUNT @StartRowIndex

 

SELECT 

    @FirstTimeUTC = TimeUTC,

    @FirstSequence = Sequence

FROM

    ELMAH_Error

WHERE  

    Application = @Application

ORDER BY

    TimeUTC DESC,

    Sequence DESC

 

-- Now set the row count to the requested page size and get

-- all records below it for the pertaining application.

 

SET ROWCOUNT @PageSize

 

SELECT

    @TotalCount = COUNT(1)

FROM

    ELMAH_Error

WHERE

    Application = @Application

 

SELECT

    errorId,

    application,

    host,

    type,

    source,

    message,

    [user],

    statusCode,

    CONVERT(VARCHAR(50), TimeUtc, 126) + 'Z' time

FROM

    ELMAH_Error error

WHERE

    Application = @Application

AND

    TimeUTC <= @FirstTimeUTC

AND

    Sequence <= @FirstSequence

ORDER BY

    TimeUTC DESC,

    Sequence DESC

FOR

    XML AUTO

 

GO

SET QUOTED_IDENTIFIER OFF

GO

SET ANSI_NULLS ON

GO

 

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_NULLS ON

GO

 

CREATE PROCEDURE dbo.ELMAH_LogError

(

    @ErrorId UNIQUEIDENTIFIER,

    @Application NVARCHAR(60),

    @Host NVARCHAR(30),

    @Type NVARCHAR(100),

    @Source NVARCHAR(60),

    @Message NVARCHAR(500),

    @User NVARCHAR(50),

    @AllXml NTEXT,

    @StatusCode INT,

    @TimeUtc DATETIME

)

AS

 

SET NOCOUNT ON

 

INSERT

INTO

    ELMAH_Error

    (

        ErrorId,

        Application,

        Host,

        Type,

        Source,

        Message,

        [User],

        AllXml,

        StatusCode,

        TimeUtc

    )

VALUES

    (

        @ErrorId,

        @Application,

        @Host,

        @Type,

        @Source,

        @Message,

        @User,

        @AllXml,

        @StatusCode,

        @TimeUtc

    )

 

GO

SET QUOTED_IDENTIFIER OFF

GO

SET ANSI_NULLS ON

GO 

 5 预览

http://localhost/youresiteName/elmah.axd

可能需要先登录login.aspx.如果不需要登录,可以在web.config里删掉相应代码.

posted @ 2011-03-29 13:30  天道酬勤Cool  阅读(1475)  评论(0编辑  收藏  举报