使用 Elmah一些要注意的问题

http://www.cnblogs.com/apsnet/archive/2012/04/28/2474730.html

 1. Elmah使用后,在发布时,要区分IIS6和IIS7 ,IIS6下 HttpModules必须在web.config或App.config 配置文件中使用 system.web注册,而IIS7 必须使用 sysem.webserver.

IIS6:

1   <system.web>
2     <httpModules>
3       <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
4     </httpModules>
5   </system.web>

IIS7:

1   <system.webServer>
2     <modules>
3       <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
4     </modules>
5   </system.webServer>
令外介绍下Elmah使用,这个是一款ASP.NET下的系统错误记录管理工具。下载相应的dll,引用到project.如果想记录在数据库,必须建立一张错误记录表。web.config配置如下.

 1 <configSections>
 2 <sectionGroup name="elmah">
 3   <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/>
 4   <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah"/>
 5   <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah"/>
 6   <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah"/>
 7 </sectionGroup>
 8 </configSections>
 9
10 <connectionStrings>
11 <add name="strCon" connectionString="Data Source=J18423X;Initial Catalog=UserDB;User ID=sa;Password=1234" providerName="System.Data.SqlClient"/>
12 </connectionStrings>
13
14 <elmah>
15   <security allowRemoteAccess="0" />
16   <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="strCon" />
17 </elmah>
18
19 <httpHandlers>
20   <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah"/>
21 </httpHandlers>
22 //注意httpModules在IIS6和7中需要注意,如问题所述。
23 <httpModules>
24   <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
25 </httpModules>
26
27 <location path="elmah.axd">
28   <system.web>
29   <authorization>
30 <deny users="?"/>
31   </authorization>
32   </system.web>
33 </location>

数据库相关

/* 错误管理工具 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

//创建存储过程,得到单个错误xml

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 

时间: 2024-10-11 22:25:35

使用 Elmah一些要注意的问题的相关文章

MVC扩展Filter,通过继承HandleErrorAttribute,使用log4net或ELMAH组件记录服务端500错误、HttpException、Ajax异常等

□ 接口 public interface IExceptionFilter{    void OnException(ExceptionContext filterContext);} ExceptionContext继承于ControllerContext,从中可以获得路由数据route data.HttpContext. □ 的HandleErrorAttribute是对IExceptionFilter的实现,默认是启用的 public static void RegisterGlobal

三分钟集成elmah xml 格式日志到mvc站点

1.通过nuget安装Elmah ELMAH on XML Log 会自动在web.config 文件中添加配置内容,默认不允许远程访问,日志访问路径是 Elmah.axd,不记录500错误 2.修改配置文件 增加500的异常记录,允许远程访问 <elmah> <!-- See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for more information on remote access and securi

Using sql azure for Elmah

The MSDN docs contain the list of T-SQL that is either partially supported or not supported.  For example see the following location for CREATE TABLE - http://msdn.microsoft.com/en-us/library/ee336258.aspx In Elmah's case, the filegroup is not suppor

利用Elmah和Google体验一把入侵的快感

介绍 关于ELMAH,相信大家都不陌生了,最流行的错误日志记录组件,用过的人都知道其强大的威力,可以记录非常详细的错误信息供管理员和开发人员进行分析.Elmah配置起来也非常简单,但是同时也带来了一个问题:那就是如果配置不好的话,就会被入侵,而且入侵的方法非常非常简单,本文我讲演示一下,如何利用Elmah错误信息和Google搜索来入侵一个站点,同时本文也提供了正确的Elmah配置方法. 注1:本人目的是让大家正确配置ELMAH,不是教大家入侵哦,入侵有风险,实施需谨慎 注2:在这里,我要澄清一

elmah oracle

1. <sectionGroup name="elmah"> <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" /> <section name="errorLog" requirePermission="false" t

C#组件系列———又一款日志组件:Elmah的学习和分享

前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了“规矩”,今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往,园子里每年这个时候都有大把的年终总结.回忆过去展望未来之类的文章.博主是没时间写总结了,要学的东西太多.关于Vue的系列一定要抽时间补上.最近刚用了一个日志组件Elmah,比较适合开发阶段异常信息的快速定位与追溯,有兴趣的跟着博主一起来看看吧. 本文原创地址:http://www.cnblogs.com/landea

【工具推荐】ELMAH——可插拔错误日志工具

ELMAH 是 Error Logging Modules and Handlers for ASP.NET 的缩写.ELMAH可以让你记录下你的网站发生的任何一个错误,在将来,你可以重新检查这些错误.你可以从ELMAH项目的官方网站免费下载ELMAH:http://code.google.com/p/elmah/. ELMAH既支持ASP.NET Web Forms 又支持 ASP.NET MVC.你可以对ELMAH进行配置来存储各种不同的错误(XML文件,事件日志,Access数据库,SQL

MVC 通过继承HandleErrorAttribute,使用log4net或ELMAH组件记录异常等

接口 public interface IExceptionFilter {     void OnException(ExceptionContext filterContext); } ExceptionContext继承于ControllerContext,从中可以获得路由数据route data.HttpContext. □ 的HandleErrorAttribute是对IExceptionFilter的实现,默认是启用的 public static void RegisterGloba

elmah - Error Logging Modules and Handlers for ASP.NET - 1 : 初体验

elmah(英文):https://code.google.com/p/elmah/ 写作思路:先看结果,然后再说原理 elmah文章基本内容如下 1.安装 2.基本使用 3.详细配置讲解 简介 ELMAH是一个开源项目,其目的是记录和报告在ASP.NET Web应用程序未处理的异常. 早在2004年9月与Atif阿齐兹和斯科特·米切尔发表在MSDN Library,其目的是作为一个概念证明,编写自包含的功能与ASP.NET HTTP模块和处理程序是绝对有可能的,大多有这种特征可能是一篇文章插入