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

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. Python 编程语言要掌握的技能之一:善用变量来改善代码质量

    如何为变量起名 在计算机科学领域,有一句著名的格言(俏皮话): There are only two hard things in Computer Science: cache invalidati ...

  2. windows系统与SQL SERVER 2008数据库服务性能监控分析简要

    软件系统性能测试体系流程介绍之windows系统与SQL SERVER 2008数据库服务性能监控分析简要 目前大部分测试人员对操作系统资源.中间件.数据库等性能监控分析都是各自分析各自的监控指标方式 ...

  3. JavaScript基础目录

    一.JavaScript简介 1.JavaScript用途 2.JavaScript的诞生 3.JavaScript从丑小鸭到金凤凰 4.JavaScript非常好学 5.学习方法 二.Hello W ...

  4. String字符串为什么不可变的深入理解

    String是被final修饰的,是不可变对象,那么这句什么意思呢.在学习scala时候var,val时候,就想到这个问题,所以记录下 看案例: package com.cxy; import sun ...

  5. 从零开始入门 K8s | 深入剖析 Linux 容器

    作者 | 唐华敏(华敏)  阿里云容器平台技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 15 讲. 关注"阿里巴巴云原生"公众号,回复关键词 ...

  6. easywechat微信开发SDK之小微商户进件(一)

    微信本身不提供小微商户进件的SDK,偶然发现easywechat这么个东西,官网地址是https://www.easywechat.com/  整合了微信开发中常用的接口,包括微信公众号相关接口,微信 ...

  7. 【数据结构】之顺序表(C语言描述)

    顺序表是线性表的一种,它将元素存储在一段连续的内存空间中,表中的任意元素都可以通过下标快速的获取到,因此,顺序表适合查询操作频繁的场景,而不适合增删操作频繁的场景. 下面是使用 C语言 编写的顺序表的 ...

  8. python基本文件操作

    python文件操作 python的文件操作相对于java复杂的IO流简单了好多,只要关心文件的读和写就行了 基本的文件操作 要注意的是,当不存在某路径的文件时,w,a模式会自动新建此文件夹,当读模式 ...

  9. java 算法之 两个字符串中最大相同的子串

    public class String_intern { public static void main(String[] args) { String old="aaaaabc1" ...

  10. javascript获取当前时间CurentTime

    function CurentTime(){ var now = new Date(); var year = now.getFullYear(); //年 var month = now.getMo ...