为了方便查询系统出错弄个错误日志出来对于维护运维来说是很有必要的。

1、开始

在Asp.Net MVC项目中的App_Start添加一个用于处理异常类的文件ErrorLog让他继承HandleErrorAttribute类并重写OnException方法

public class ErrorLog: HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
if(!filterContext.ExceptionHandled)
{
//当前Controller名称
string controllName = (string)filterContext.RouteData.Values["controller"];
//当前Action
string actionName = (string)filterContext.RouteData.Values["action"];
//定义一个HandErrorInfo,用于Error视图展示异常信息
HandleErrorInfo model = new HandleErrorInfo(filterContext.Exception, controllName, actionName);
//时间用来给txt命名
string thisTime = DateTime.Now.ToString("yyyyMMdd");
string errorDetails = $"出错时间:{DateTime.Now.ToString()},错误发生在{model.ControllerName}控制器的{model.ActionName},错误类型:{model.Exception.Message}";
string splitLine = "============================下一条==============================";
//日志存放位置,在项目目录里面一个月一个文件夹,一天一个文件
string path = HttpContext.Current.Server.MapPath(@"\ErrorLog\" + DateTime.Now.Year.ToString()+ @"\" + DateTime.Now.ToString("MM") + @"\" );
//判断文件夹不存在就创建
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
//写入日志
using (System.IO.StreamWriter file = new System.IO.StreamWriter(path + thisTime+".txt", true))
{
file.WriteLine(errorDetails);
file.WriteLine(model.Exception.StackTrace);
file.WriteLine(splitLine); }
//出错跳转到指定页面,如果Global.asax写了Application_Error方法可以不用写
ViewResult result = new ViewResult
{
ViewName = this.View,//设置异常时跳转的404页面
ViewData = new ViewDataDictionary<HandleErrorInfo>(model) //定义ViewData,泛型
};
filterContext.Result = result;
filterContext.ExceptionHandled = true;//设置异常已处理 }
}
}

在视图里面的shared文件夹下面加一个Error视图,里面就是错误日志,类似于404页面一样的功能

2、配置App_Start

在App_Start文件夹下面的FilterConfig.cs文件里面配置

public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ErrorLog() { View="Error"});
}
}
ErrorLog别写错了,里面有个原始的HandleErrorAttribute类改名为你第一步添加的类

3、最后看一下Gloabl.asax

看看里面注册了FilterConfig没有,一般都是有的

public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}

4、调用实例

我写的一个图片上传,没有文件夹抛异常

/// <summary>
/// 图片上传
/// </summary>
/// <param name="file">图片</param>
/// <returns></returns>
public ActionResult FileUpLoad1(HttpPostedFileBase file)
{
var ret = string.Empty;
try
{
string fileName = Guid.NewGuid()+file.FileName;
string filePath = Server.MapPath(@"\FileUp2\");
//if (!Directory.Exists(filePath))
// Directory.CreateDirectory(filePath);
file.SaveAs(Path.Combine(filePath, fileName)); }
catch (Exception ex)
{
ret = ex.Message + ":" + ex.InnerException;
throw new Exception (ex.Message + ":" + ex.InnerException);
}
if(string.IsNullOrEmpty(ret))
return Json(new { code = "", msg = "文件上传成功!", data = "" });
else
return Json(new { code = "", msg = "文件上传失败!", data = ret });
}

注意要想记录日志一定要把异常抛出来  就是 throw new Exception (ex.Message + ":" + ex.InnerException);

5、效果

Asp.Net MVC中记录错误日志保存到本地txt文件的更多相关文章

  1. ASP.NET MVC中的错误处理

    ASP.NET MVC中的错误的错误处理跨越了两个主要领域:程序异常和路由异常的处理.前者是关于在控制器和视图中捕获错误的;而后者更多是有关重定向和HTTP错误的. 1.在WebConfig中把过滤器 ...

  2. ASP.NET MVC中的错误-友好的处理方法

    转自:http://blog.csdn.net/lizhao1226/article/details/6367400 “/”应用程序中的服务器错误. 无法找到资源. 说明: HTTP 404.您正在查 ...

  3. DML过程中记录错误日志

    当你插入几百万数据时,由于有几条脏数据而导致插入失败,是不是很恼火.10g R2之后有个新功能.将插入过程中失败的记录插入到还有一张表中. SQL> drop table test purge; ...

  4. HttpClients+Jsoup抓取笔趣阁小说,并保存到本地TXT文件

    前言 首先先介绍一下Jsoup:(摘自官网) jsoup is a Java library for working with real-world HTML. It provides a very ...

  5. Asp.Net MVC中捕捉错误路由并设置默认Not Found页面。

    在Global中写一个Application_Error捕捉错误路由并重定向到Not Found页面.这里是全局性抓取错误路由,此处还可以写由错误路由导致访问失败的日志记录. protected vo ...

  6. 实战:ASP.NET MVC中把Views下面的视图放到Views文件夹外

    园子里写的文章的都是把控制器从传统的项目中的Controllers拿出来单独放,但很少几乎没有把视图从Views拿出去这样的文章,今天来写一个. 其实很简单!一步步解决问题就行了,下面记录如下,供需要 ...

  7. ASP.NET MVC中,怎么使用jquery/ajaxForm上传文件

    ajaxForm插件最好选择:jquery forms plugin. 以下为示例: Ajax.BeginForm @using (Ajax.BeginForm("YourAction&qu ...

  8. MVC中的Views下面的视图放到Views文件夹外

    实战:把ASP.NET MVC中的Views下面的视图放到Views文件夹外   园子里写的文章的都是把控制器从传统的项目中的Controllers拿出来单独放,但很少几乎没有把视图从Views拿出去 ...

  9. ASP.NET MVC中Log4Net记录错误日志的使用

    第一.在管理NuGet程序包 =>下载 Log4Net 第二.在web.config配置Log4Net 1:在<configuration>节点下 <configSection ...

随机推荐

  1. API规范约定

    为了高效开发,节约编写文档的成本,API服务使用Swagger来描述 一.API设计原则 控制API的粒度和数量 命名要遵循简单.可读.统一原则: 优先设计API,然后编码 二.URL设计[针对后端开 ...

  2. Spring与Shiro整合 登陆操作

    Spring与Shiro整合 登陆操作 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 编写登陆Controller方法  讲解: 首先,如果你登陆失败的时候,它会把你的异常信息丢到 ...

  3. 【Luogu P3834】可持久化线段树(主席树)

    Luogu P3834 可持久化数据结构就是支持在历史版本上进行查询和修改操作的数据结构. 主席树就是对线段树的改进,使之可持久化. 前置知识:动态开点线段树 我们利用权值(值域)线段树统计区间内的数 ...

  4. FullGC排查心得

    最近线上系统(JDK1.7)出现了多次FullGC,但是情况都不一样,今天有时间,将FullGC的排查思路以及如何解决记录下,供大家一起探讨. 场景一: 系统发布上线之后,里面收到如下告警信息: 内容 ...

  5. 使用python2连接操作db2

    在python2.6下连接db2,步骤: 1.安装python2.6. (注:目前db2的驱动还不支持2.7) 2.安装setuptools,下载地址http://pypi.python.org/py ...

  6. 面试阿里被“吊打”,一问Spring三不知,半年后二战终拿下offer

    Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发. 近两年来,许多大厂在面 ...

  7. Java 从入门到进阶之路(十)

    之前的文章我们介绍了一下 Java 中的引用型数组类型,接下来我们再来看一下 Java 中的继承. 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继 ...

  8. tcp协议传输方法&粘包问题

    socket实现客户端和服务端 tcp协议可以用socket模块实现服务端可客户端的交互 # 服务端 import socket #生成一个socket对象 soc = socket.socket(s ...

  9. 复习sed实例操作

    第6周复习课(5月2日) 课程内容: 复习 扩展1.打印某行到某行之间的内容http://ask.apelearn.com/question/5592.sed转换大小写 http://ask.apel ...

  10. 【立即报名】解码AI大杀器:华为云GPU+Tensorflow 容器实战

    导语: 人工智能的火热,带来了一波学习TensorFlow深度学习框架的热潮.聊深度学习免不了要用GPU,但目前GPU费用较高,对于个人学习者和创业公司来讲的话,按需配置的云GPU服务器是一个不错的选 ...