65.9K
CodeProject 正在变化。 阅读更多。
Home

MVC 中的 Elmah

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (9投票s)

2016年12月6日

CPOL

3分钟阅读

viewsIcon

20581

downloadIcon

326

Elmah 是什么?以及如何在 MVC 中使用 Elmah?

引言

让我们首先确定代码的目的是什么。

本文的目的是解释什么是 ELMAH,如何在 MVC 中使用和配置它。

背景

什么是 ELMAH?

ELMAH = Error Logging Modules And Handlers(错误日志记录模块和处理程序)

ELMAH 提供记录运行时 ASP.NET 错误的功能。

为什么选择 ELMAH?

  • ELMAH 记录所有未处理的异常。
  • ELMAH 可以将所有错误记录到多种存储介质中,例如:
    • SQL Server
    • My SQL
    • 随机存取存储器 (RAM)
    • SQL Lite
    • Oracle
  • ELMAH 还具有将所有错误下载到 CSV 文件中的功能。
  • 最近 15 个错误的 RSS 源
  • 以 JSON 或 XML 格式获取所有错误数据
  • 将所有错误发送到我们的邮箱
  • 将错误日志通知发送到您的应用程序
  • 通过自定义一些代码来定制错误日志

ELMAH HTTP 模块。

有三个 HTTP 模块。

  1. ErrorMailModule
  2. ErrorLogModule
  3. ErrorFilterModule

ErrorMailModule 用于以电子邮件形式发送日志的详细信息。

ErrorLogModule 用于记录所有异常以及其他一些详细信息,如 IP 地址、用户名、网站用户名等。

ErrorFilterModule 用于自定义异常日志。

使用代码

步骤:01 创建一个新的 MVC 应用程序。

1) 文件菜单上,单击新建,然后单击项目

2) 在“新建项目”对话框的“项目类型”下,展开“Visual C#”,然后单击“Web”,并在“名称”框中键入 “DemoELMAH”,然后单击“确定”。

3) 现在,在对话框中,单击 ASP.NET 4.5.2 模板下的 "MVC",然后单击位于右侧中心的 "更改身份验证",最后选择 "无身份验证" 并单击“确定”。

步骤:02 安装 ELMAH 库并注册其模块。

1) 使用以下方法打开 NuGet 包管理器控制台。
   单击工具 > NuGet 包管理器 > 包管理器控制台

2) 键入 "Install-Package elmah" 并按 Enter 键

3) 成功安装后,您会发现以下屏幕。 

4) ELMAH 模块默认在 Web.config 中注册。 如果没有,请使用以下代码。

<system.web>
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" />
    <httpModules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    </httpModules>
</system.web>

<system.webServer>
    <modules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
    </modules>
</system.webServer>

<elmah>
    <security allowRemoteAccess="false" />
</elmah>

<location path="elmah.axd" inheritInChildApplications="false">
    <system.web>
      <httpHandlers>
        <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
      </httpHandlers>
    </system.web>
    <system.webServer>
      <handlers>
        <add name="ELMAH" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
      </handlers>
    </system.webServer>
</location>

5) 创建一个 ActionMethod

public ActionResult Index()
{
    return View();
}

运行项目。 现在,在地址栏中输入错误的 URL 并按 Enter 键。 我们会发现 404 错误

现在,对于 ELMAH 日志,在地址栏中输入以下 URL。

https://:57979/elmah.axd

注意:MVC 现在默认忽略 .axd 文件,因此此文件未在服务器中使用。 但在本文后面,我们将日志存储在另一个位置。

步骤:03 设置邮件服务器以在电子邮件中获取每个日志。 在 web.config 中添加以下代码

<elmah>
     <errorMail from="suchit@elmah.com"
     to="suchit.webmyne@gmail.com"
     subject="Error - ELMAH demo - Suchit Khunt"
     async="true" />    
</elmah>

<system.net>
    <mailSettings>
      <smtp deliveryMethod="Network">
        <network host="host address" port="port number" userName="your username" password="your password"/>
      </smtp>
    </mailSettings>
</system.net>

步骤:04 将 ELMAH 日志存储在不同的位置。

1) 将 ELMAH 日志存储在 XML 文件中。

-> 在项目的根目录中创建一个名为 "ElmahLog" 的文件夹。 我们使用此文件夹来保存 XML 文件。

-> 在您的 Web.config 中添加以下设置

<elmah>
    <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/ElmahLog" />
</elmah>

2) 将 ELMAH 日志存储在 RAM 中。

-> 在您的 Web.config 中添加以下设置

<elmah>
    <errorLog type="Elmah.MemoryErrorLog, Elmah" size="100" />
</elmah>

3) 将 ELMAH 日志存储在 Microsoft SQL Server 中。

-> 在您的 Web.config 中添加以下设置

<elmah>
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionString="DBEntities" />
</elmah>

注意:不要忘记将 connectionString 名称添加为“DBEntities”。 按照如下所示将 connectionString 名称添加为“DBEntities”。

<connectionStrings>
    <add name="DBEntities" connectionString="data source=server name;initial catalog=database name;persist security info=True;user id=your username;password=your password;Trusted_Connection=True" />
</connectionStrings>

这里一切完成... :)

© . All rights reserved.