• 真正的热插拔开源的日志记录组件


      前两天发现一个开源日志组件ELMAH,一下子就喜欢上了,喜欢他的原因是它支持“热插拔”(不需要改动任何的程序)、简单的配置(几行配置)、多种记录方式(数据库、文件、Email)、支持多数据库(Access、SqlServer、Oracle、Sqlite、VistaDB),而且查看结果也不需要编写(并且支持rss发布查看)。

      ELMAH最新版本是ELMAH-1.0-BETA3,他是基于HttpModules、HttpHandlers的处理方式,只是记录错误日志不进行处理,不过这已经足够了,我们对于可能发生的异常地方肯定就会做处理的,对于意想不到的异常交给ELMAH就可以了,我们只需给用户提供一个友好的错误页面就可以了。

      他的用法非常简单,简单的让人无法相信,下面详细介绍他的用法。

      园子里也有朋友介绍过: 疯狂的石头    一切由.NET开始

    一、下载组件 最新组件点击这里下载ELMAH-1.0-BETA3,把bin文件加的Elmah.dll加入到项目中(他支持net-1.0、  1.1、2.0、3.5)。

    二、把db文件夹下的sql脚本执行一下,我们这里选择SQLServer.sql,在你的数据库中会生成一个ELMAH_Error表。

    三、配置webconfig 在<configuration>中加入:

    <configSections>
        <sectionGroup name="elmah">

     <!-- 提示! ASP.NET1.x把requirePermission="false"去掉 -->
       <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>
      <elmah>
        <security allowRemoteAccess="0" /><!--是否允许远程访问。0代表否、1代表是-->
        <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="E:\LogHaHa\" /><!--记录到文件-->
       </elmah>

      四、在<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>

    ok大功告成了!简单吧。这样我们就可以查看异常了,我们在程序中制造一个异常,然后输入http://localhost/elmah.axd(根目录下加上elmah.axd就可以了),也可以在webconfig加入对此页面的权限控制,详细的做法请参考链接资料。

    效果图如下:

    点击Details后的详细页面:

    以rss方式查看:

    我们主要介绍下<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="E:\LogHaHa\" />参数。这里是把日志记录到文件形式。

    下面是详细介绍记录到不同地方的参数配置

    1)把日志记录到SQL Server 2000 or 2005 

            <errorLog type="Elmah.SqlErrorLog, Elmah"  connectionStringName="此处为connectionString的name" /> 适应ASP.NET2.0

            <errorLog type="Elmah.SqlErrorLog, Elmah" connectionString="Data Source=.;Initial Catalog=ELMAH;Trusted_Connection=True" /> 适应ASP.NET1.x
            
    2) 把日志记录到SQLite 适应ASP.NET2.0       1.x不支持
               
            <errorLog type="Elmah.SQLiteErrorLog, Elmah" connectionStringName="..." />
            
               字符串格式如下:
            <connectionStrings>
              <add name="..." connectionString="data source=data source=C:\Elmah.db或~/App_Data/Error.db" />
            </connectionStrings>
    3)把日志记录到XML

            <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="E:\LogHaHa\" />
     4)把日志记录到Oracle
                
            <errorLog type="Elmah.OracleErrorLog, Elmah" schemaOwner="xxx" />
                connectionStringName="..." />适应ASP.NET2.0

            <errorLog type="Elmah.OracleErrorLog, Elmah" 适应ASP.NET1.x
                schemaOwner="xxx" />
                connectionString="Data Source=xxxx;User ID=username;Password=password" />


    5)把日志记录到Access 

        <errorLog type="Elmah.AccessErrorLog, Elmah" connectionStringName="..." />适应ASP.NET2.0

            <errorLog type="Elmah.AccessErrorLog, Elmah" 适应ASP.NET1.x
                connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|Elmah.mdb" />
       
    6)把日志记录到VistaDB
            
            <errorLog type="Elmah.VistaDBErrorLog, Elmah"
                connectionStringName="..." />

               字符串格式: 
            <connectionStrings>
              <add name="..." connectionString="Data Source='E:\Elmah.vdb3';Open Mode=NonExclusiveReadWrite;Pooling=True" providerName="VistaDB.Provider" />
            </connectionStrings>
                
    7)通过电子邮件    
          通过电子邮件发送错误报告。请注意,只有From和To属性是必需的。其余的都是可选的,并可能会被删除。如果服务器不要求身份验证,您必须删除的用户名和密码属性或设置为空值(导致零长度字符串) 。如果您使用 NET Framework 1.x,那么到属性可能包含多个收件人地址,每个必须划定的分号( ; ) 。如果您使用的是NET Framework 2.0或更高版本,然后到属性可能包含多个收件人地址,每个必须划定逗号( , ) 。

            <errorMail
                from="elmah@example.com"
                to="admin@example.com"
                subject="..."
                async="true|false"
                smtpPort="25"
                smtpServer="smtp.example.com"
                userName="johndoe"
                password="secret" />
      

    另外介绍下载文件夹里面的一个小工具,tools\Cassini下的Cassini.exe,他是一个虚拟的iis服务器,可以实现多个站点运行,在xp下非常有用,虽然在xp下我们可以用IISAdmin实现多个站点运行,不过一次只能运行一个网站,这个小工具可以实现任意个站点的同时运行,我们打开文件后在Application Directory选择你的程序所在的目录,Server Port中填上一个现在的iis没有使用的端口号,然后点击start就可以查看网站了。

     PS:相比log4net个人比较喜欢这个,当然还有很多功能没有介绍,希望大家参考资料自己学习,也欢迎大家共同讨论。

    参考资料:

    http://msdn.microsoft.com/en-us/library/aa479332.aspx    MSDN介绍 http://dotnetslackers.com/articles/aspnet/ErrorLoggingModulesAndHandlers.aspx  作者的网站

     ELMAH-1.0-BETA3 最新版本下载及介绍

  • 相关阅读:
    【Java】XML文件的解析
    PE知识复习之PE合并节
    PE知识复习之PE的重定位表
    PE知识复习之PE的两种状态
    PE知识复习之PE的节表
    PE知识复习之PE的各种头属性解析
    PE知识复习之PE的导入表
    PE知识复习之PE的导出表
    PE知识复习之PE的绑定导入表
    第三讲扩展,VA,RVA,FA(RAW),模块地址的概念
  • 原文地址:https://www.cnblogs.com/weiguang3100/p/1375178.html
Copyright © 2020-2023  润新知