Asp.Net MVC中记录错误日志保存到本地txt文件
为了方便查询系统出错弄个错误日志出来对于维护运维来说是很有必要的。
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文件的更多相关文章
- ASP.NET MVC中的错误处理
ASP.NET MVC中的错误的错误处理跨越了两个主要领域:程序异常和路由异常的处理.前者是关于在控制器和视图中捕获错误的;而后者更多是有关重定向和HTTP错误的. 1.在WebConfig中把过滤器 ...
- ASP.NET MVC中的错误-友好的处理方法
转自:http://blog.csdn.net/lizhao1226/article/details/6367400 “/”应用程序中的服务器错误. 无法找到资源. 说明: HTTP 404.您正在查 ...
- DML过程中记录错误日志
当你插入几百万数据时,由于有几条脏数据而导致插入失败,是不是很恼火.10g R2之后有个新功能.将插入过程中失败的记录插入到还有一张表中. SQL> drop table test purge; ...
- HttpClients+Jsoup抓取笔趣阁小说,并保存到本地TXT文件
前言 首先先介绍一下Jsoup:(摘自官网) jsoup is a Java library for working with real-world HTML. It provides a very ...
- Asp.Net MVC中捕捉错误路由并设置默认Not Found页面。
在Global中写一个Application_Error捕捉错误路由并重定向到Not Found页面.这里是全局性抓取错误路由,此处还可以写由错误路由导致访问失败的日志记录. protected vo ...
- 实战:ASP.NET MVC中把Views下面的视图放到Views文件夹外
园子里写的文章的都是把控制器从传统的项目中的Controllers拿出来单独放,但很少几乎没有把视图从Views拿出去这样的文章,今天来写一个. 其实很简单!一步步解决问题就行了,下面记录如下,供需要 ...
- ASP.NET MVC中,怎么使用jquery/ajaxForm上传文件
ajaxForm插件最好选择:jquery forms plugin. 以下为示例: Ajax.BeginForm @using (Ajax.BeginForm("YourAction&qu ...
- MVC中的Views下面的视图放到Views文件夹外
实战:把ASP.NET MVC中的Views下面的视图放到Views文件夹外 园子里写的文章的都是把控制器从传统的项目中的Controllers拿出来单独放,但很少几乎没有把视图从Views拿出去 ...
- ASP.NET MVC中Log4Net记录错误日志的使用
第一.在管理NuGet程序包 =>下载 Log4Net 第二.在web.config配置Log4Net 1:在<configuration>节点下 <configSection ...
随机推荐
- C#音频截取与原文匹配2:使用ffmpeg处理音频文件
ffmpeg获取音频时间 ffmpeg转换音频格式(单声道,16000hz,16bit wav) ffmpeg截取音频 不知道是不是错觉,感觉ffmpeg比NAudio要快啊~ 那么这就是第二个版本 ...
- Java流程控制之(三)嵌套
目录 嵌套循环 for循环嵌套 while循环嵌套 总结 之前谈到各种循环结构,有for循环啊,有while循环啊,可以完成不断重复的动作,相当方便.那么如果好多个循环结合再一次,又是如何实现效果的呢 ...
- day03_正则表达式
1.数据分类 数据的分类 定义:数据以行为单位,每一个数据表示一个实体的信息.每一行数据的属性都是一样的. 常见的结构化数据为关系型数据库存储数据. 半结构化数据 定义:结构化数据的另一种 ...
- 什么鬼,面试官竟然让我用Redis实现一个消息队列!!?
GitHub 9.4k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 9.4k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 9.4k Star 的 ...
- EFK教程(4) - ElasticSearch集群TLS加密通讯
基于TLS实现ElasticSearch集群加密通讯 作者:"发颠的小狼",欢迎转载 目录 ▪ 用途 ▪ ES节点信息 ▪ Step1. 关闭服务 ▪ Step2. 创建CA证书 ...
- uni-app中使用scroll-view滚到底部时多次触发scrolltolower事件
一.前言.scroll-view基本属性: 前言: 前段时间使用scroll-view可滚动视图区域容器来做多个不同内容的展示(在我这个页面中同时使用了三个scroll-view做数据展示),因为这几 ...
- 我的第一个 python 爬虫脚本
#!/usr/bin/env python# coding=utf-8import urllib2from bs4 import BeautifulSoup #res = urllib.urlopen ...
- 使用app测试Modelarts在线服务
1. 基础准备 本demo代码已上传github地址为 https://github.com/zxzxzxygithub/hwmodelartdemo clone下来之后导入android studi ...
- “copy” 与 “=“赋值
前拷贝 与 赋值 >>> a = {1:'one',2:'two',3:'three'}>>> b = a.copy()>>> c = a&g ...
- eNSP 简介及基础操作
eNSP 一. eNSP简介 eNSP是一款由华为自主研发的.免费的.可扩展的.图形化操作的网络仿真工具平台,主要对企业网络路由器.交换机及相关物理设备进行软件仿真,支持大型网络模拟.界面如下: 界面 ...