2021-01-13

又一款日志组件:ELMAH日志处理异常

背景

ELMAH就是一个日志的拦截和处理组件,说到.net的日志组件,大家的第一反应该是Log4Net、NLog等这些东西,关于Log4Net和NLog,可以说是.net日志组件里面使用最为广泛的组件了,它们功能强大、使用方便。

优点

相比它们:

1、ELMAH的使用更加简单,它甚至不用写一句代码;

2、ELMAH是一种"可拔插式"的组件,即在一个运行的项目里面我们可以随意轻松加入日志功能,或者移除日志功能;

3、ELMAH组件自带界面,不用写任何代码,即可查看异常日志的界面;

4、组件提供了一个用于集中记录和通知错误日志的机制,通过邮件的机制通知错误信息给相关人员。

代码实现

1、nuget安装 using Elmah;

 

 2、Application_Error 异常404处理

 protected void Application_Error(object sender, EventArgs e)  {   if (BQoolCommon.Helpers.Setting.CommonSetting.IsProd())   {    if (e is ExceptionFilterEventArgs exceptionFilter)    {     if (exceptionFilter.Exception is HttpException httpException && httpException.Message.StartsWith(_exceptionMsg))     {      Response.Redirect("/");     }    }    Response.Clear();    Server.ClearError();    Response.StatusCode = 404;   }  }

3、排除 Elmah 404 寄信通知

 public void ErrorMail_Filtering(object sender, ExceptionFilterEventArgs e)  {   if (e.Exception is HttpException httpException && (httpException.GetHttpCode() == 404 || httpException.Message.StartsWith(_exceptionMsg)))   {    e.Dismiss();   }  }

4、自定 Elmah 发信主旨

 void ErrorMail_Mailing(object sender, Elmah.ErrorMailEventArgs e)  {   string machineName = "none server";   try   {    if (Request != null)    {     machineName = Request.ServerVariables["HTTP_HOST"];    }   }   catch   {   }   // 取得 Elamh ErrorMail 的主旨   // "$MachineName$ at $ErrorTime$ : {0}"   string elmahSubject = e.Mail.Subject;   //替換 ErrorMail 的主旨內容   string emailSubject = string.Format("BigCRM.Web Error => {0}",    elmahSubject     .Replace("$MachineName$", machineName)   );   e.Mail.Subject = emailSubject;  }

5、web.config配置

 <elmah> <!--  See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for   more information on remote access and securing 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>  <!--   See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for   more information on using ASP.NET authorization securing ELMAH.  <authorization>  <allow roles="admin" />  <deny users="*" />  </authorization>  --> </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>

运行效果

 

 

 

 

总结

ELMAH对于中小项目来说不失为一种不错的选择;









原文转载:http://www.shaoqun.com/a/508650.html

跨境电商:https://www.ikjzd.com/

auditor:https://www.ikjzd.com/w/2437

c79:https://www.ikjzd.com/w/1016


背景ELMAH就是一个日志的拦截和处理组件,说到.net的日志组件,大家的第一反应该是Log4Net、NLog等这些东西,关于Log4Net和NLog,可以说是.net日志组件里面使用最为广泛的组件了,它们功能强大、使用方便。优点相比它们:1、ELMAH的使用更加简单,它甚至不用写一句代码;2、ELMAH是一种"可拔插式"的组件,即在一个运行的项目里面我们可以随意轻松加入日志功能,或者移除日志功能
一淘网:一淘网
转口贸易:转口贸易
宁夏全面实行景区分时预约制度:宁夏全面实行景区分时预约制度
庐山门票价格_庐山门票多少钱 :庐山门票价格_庐山门票多少钱
阿里将20亿美元收购网易考拉?双方:不予置评!:阿里将20亿美元收购网易考拉?双方:不予置评!

No comments:

Post a Comment