asp.net MVC自定义错误页,并记录错误日志

只需要在Global.asax文件中添加以下代码,则可以在出错后友好的展示错误页,也不需要在很多地方写记录错误日志的代码

  protected void Application_Error(object sender, EventArgs e)
        {
            if (HttpContext.Current.IsCustomErrorEnabled)
            {
                return;
            }
            var exception = Server.GetLastError();
            var httpException = new HttpException(null, exception);
            //记录错误日志
            if (httpException.InnerException != null)
            {
                LogManager.WriterLog(httpException.InnerException.ToString(), DateTime.Now.ToString("yyyyMMdd"));
            }
            var routeData = new RouteData();
            routeData.Values.Add("controller", "Error");
            routeData.Values.Add("action", "Index");
            routeData.Values.Add("httpException", httpException);
            Server.ClearError();
            var errorController = ControllerBuilder.Current.GetControllerFactory().CreateController(
                new RequestContext(new HttpContextWrapper(Context), routeData), "Error");
            errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
        }
 LogManager.WriterLog是我自己写的一个日志记录类,简单的记录了一下错误的内容
public class LogManager
    {
        /// <summary>
        /// 记录错误日志
        /// </summary>
        /// <param name="content">错误内容</param>
        /// <param name="fileName">文件名称</param>
        public static void WriterLog(string content, string fileName)
        {
            var path = HttpRuntime.AppDomainAppPath + "\\Log\\" + DateTime.Now.ToString("yyyy-MM") + "\\";
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            fileName = path + fileName + ".txt";
            if (!File.Exists(fileName))
            {
                File.Create(fileName).Dispose();
            }
            using (var sw = File.AppendText(fileName))
            {
                sw.WriteLine(DateTime.Now);
                sw.WriteLine(content);
                sw.WriteLine("");
            }

        }
    }

在发布到服务器的时候,我们可以同时把项目的.pdb文件也拷贝过去,这样记录错误日志的时候会把行号和错误文件所在的路径也记录下来,比较方便定位和修。

 
时间: 2024-10-24 19:49:46

asp.net MVC自定义错误页,并记录错误日志的相关文章

asp.net mvc 自定义pager封装与优化

asp.net mvc 自定义pager封装与优化 Intro 之前做了一个通用的分页组件,但是有些不足,从翻页事件和分页样式都融合在后台代码中,到翻页事件可以自定义,再到翻页和样式都和代码分离, 自定义分页 pager 越来越容易扩展了. HtmlHelper Pager扩展 Pager V1.0 : 1 /// <summary> 2 /// Pager V1.0 3 /// </summary> 4 /// <param name="helper"&

.Net Framework 4.5.1 ASP.NET MVC 5 下新建视图报“错误 运行所选代码生成器时出错 无法检索元数据 没有为该对象定义无参数构造函数”

当在控制器中新建视图的时候,选择的视图界面如下: 执行添加后报如下错误: 错误的内容为: 错误运行所选代码生成器时出错 无法检索"XXX"的元数据没有为该对象定义无参数构造函数 Unable to retrieve metadata for 'XXX'. No parameterless constructor defined for this object. 这个错误一直误导我,以为是模型类的问题,找了半天找不到解决方法,郁闷到死,后来发现是数据上下文的问题. 想到解决方案使用的是D

ASP.NET MVC自定义验证Authorize Attribute(包含cookie helper)

前几天Insus.NET有在数据库实现过对某一字段进行加密码与解密<使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和解密>http://www.cnblogs.com/insus/p/5983645.html那今次Insus.NET在ASP.NET MVC实现自定义验证Authorize Attribute. 实现之前,Insus.NET对usp_Users_VeryLoginVerify修改一下,改为更好理解与使用

ASP.NET MVC下自定义错误页和展示错误页的几种方式

在网站运行中,错误是不可避免的,错误页的产生也是不可缺少的. 这几天看了博友的很多文章,自己想总结下我从中学到的和实际中配置的. 首先,需要知道产生错误页的来源,一种是我们的.NET平台抛出的,一种是网站所依赖的宿主抛出的,一般来讲我们所依赖的宿主就是IIS了. IIS中的错误页入口: 其中的错误码想必并不陌生 这里是在服务器上找不到所需资源时抛出的错误页,在这里可以设置需要展示的错误页面,只需将预定的错误页面加入服务器中,然后在指定状态码下配置路径即可. 这是请求在IIS中时,还未完全进入到a

ASP.net MVC自定义错误处理页面的方法

在ASP.NET MVC中,我们可以使用HandleErrorAttribute特性来具体指定如何处理Action抛出的异常.只要某个Action设置了HandleErrorAttribute特性,那么默认的,当这个Action抛出了异常时MVC将会显示Error视图,该视图位于~/Views/Shared目录下. 设置HandleError属性 可以通过设置下面这些属性来更改HandleErrorAttribute特性的默认处理: ExceptionType.指定过滤器处理那种或哪些类型的异常

ASP.NET MVC自定义验证Authorize Attribute

前几天Insus.NET有在数据库实现过对某一字段进行加密码与解密<使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和解密>http://www.cnblogs.com/insus/p/5983645.html那今次Insus.NET在ASP.NET MVC实现自定义验证Authorize Attribute. 实现之前,Insus.NET对usp_Users_VeryLoginVerify修改一下,改为更好理解与使用

Asp.net mvc自定义Filter简单使用

自定义Filter的基本思路是继承基类ActionFilterAttribute,并根据实际需要重写OnActionExecuting,OnActionExecuted,OnResultExecuting,OnResultExecuted这四个中的一个或多个方法. 注意类名一定要以Attribute结尾. 故名思义,Action执行前,执行后,结果返回前,结果返回后.所以它们的执行先后顺序就是OnActionExecuting,OnActionExecuted,Action,OnResultEx

设置ASP.NET MVC站点默认页为.html页 .

同事部署了一个Asp.Net MVC的站点,希望它的默认页是index.html页,在vs2010中给站点根目录增加了index.html,然后调用没有什么问题,但部署到IIS7上,在功能试图=>默认文档添加了index.html,但是只输入域名还是访问不到,看来还是.net mvc和IIS不兼容的原因,后来同事采用的办法是在global文件中把默认页面写成一个需要登录的页面,这样因为没有权限,系统会自动跳转到登录页面 public static void RegisterRoutes(Rout

ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制

1.前言 a.微软对ASP.NET的开发从WebForm到MVC的转变,已经正式过去5,6个年头,现在WebForm和MVC也都越来越完善,小小算来我也已经工作了将近三年,从大学的时候学习ASP.NET WebForm,感觉这就是我们以后吃饭的技术,所以当时可劲的学习拖各种控件,学习做各种各样的小项目,但是没想到的是,从大学最后一学期参加实习开始到现在也就一直没有机会接触ASP.NET WebForm,基本也都是在用MVC开发.我并不是说MVC就比WebForm开发好或者什么的,我只是觉得他们都