c# 用ELMAH日志组件处理异常
作者:UP技术控 发布时间:2022-03-11 12:05:36
标签:c#,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对于中小项目来说不失为一种不错的选择;
来源:https://www.cnblogs.com/lyl6796910/p/14270638.html
0
投稿
猜你喜欢
- 前提之前很长一段时间关注JDK协程库的开发进度,但是前一段时间比较忙很少去查看OpenJDK官网的内容。Java协程项目Loom(因为项目还
- 文章描述在前一篇写了如何将一张GIF动态图分解成一帧一帧的图片,这一篇我们就把喝进去的一瓢水给还回去。即把一张又一张的图片去拼合成一张GIF
- 本文实例讲述了C#启动进程的几种常用方法。分享给大家供大家参考。具体如下:1.启动子进程,不等待子进程结束private void simp
- 准备工作:import java.text.SimpleDateFormat;import java.util.Calendar;impor
- 前言 因为自己在做的一个小软件里面需要用到从A-Z排序的ListView,所以自然而然的想到了微信的联系人,我想要的就是那样的效果。本来没
- 项目开发中为了保护用户隐私安全,一般都会用MD5进行密码加密以下就简单举例SpringBoot 实现Mysql使用MD5进行密码加密做一个简
- 一个提交到服务器的处理通常可以分为两个阶段,第一个阶段查询服务器状态(查询或者更新数据库),第二个阶段选择一个合适的结果页面其返回给用户(这
- java进行时间转换成unix timestamp的具体代码,供大家参考,具体内容如下import java.text.DateFormat
- 需求:用TreeSet集合存储多个学生信息(姓名,语文成绩,数学成绩),并遍历该集合;要按照总分从高到低进行排序分析:1.创建学生类 成员变
- 1. 什么是JWTJSON Web Token(JWT)是一个轻量级的认证规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信
- 在有些时候,我们需要从数据库读取数据填充对象或从硬盘读取文件填充对象,但是这样做相对耗时。这时候我们就想到了对象的拷贝。本文即以实例形式解析
- 本文以一个实例的形式讲述了C#实现复杂XML的序列化与反序列化的方法。分享给大家供大家参考。具体方法如下:已知.xml(再此命名defaul
- 本文实例讲述了java使用Hashtable过滤数组中重复值的方法。分享给大家供大家参考,具体如下:package org.eline.co
- using System.Collections.Generic;using System.Linq;using System.Refle
- 本文将介绍在REST API中实现分页的基础知识。我们将专注于使用Spring Boot和Spring Data 在Spring MVC中构
- 引入所谓泛型,就是创建一个函数,对所有数据类型都生效。最常见的例子就是运算符,毕竟1+1=2,1.0+1.0=2.0,足以看出+是对多种数据
- java 中 * 机制的实例讲解在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,
- 本文实例为大家分享了ImageSwitcher图像切换器的实现代码,供大家参考,具体内容如下描述在该实例中,提供一个图片切换器和两个点击按钮
- 我们在设计layout的时候,使用Split视图,就是左侧是代码,右侧是设计图,但是我们忽视了最上方的工具栏,这里才是真正的宝藏。下面教大家
- Maven 多profile及指定编译要点项目A依赖项目B,项目A、B都有对应的多个profile,通过mvn –P参数指定profile,