• 使用 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 
    复制代码
  • 相关阅读:
    API接口签名验证2
    jps看不到进程号 规格严格
    XP Administrator账户没有了?显示欢迎屏幕下所隐藏的Administrator账户 规格严格
    PDH 规格严格
    plugin.xml 规格严格
    强大的备份软件 规格严格
    关于工具使用 规格严格
    java.library.path属性在代码中设置不生效问题 规格严格
    RCP 规格严格
    Linux下信息查询 规格严格
  • 原文地址:https://www.cnblogs.com/shiningrise/p/5539456.html
Copyright © 2020-2023  润新知