第三节:使用Log4net和过滤器记录异常信息,返回异常给前端
上次面试,遇到,在项目中如何处理业务异常和代码异常,使用txt记录异常信息后,如何直接区分出异常的类型,异常怎么分类处理,希望大家能帮我提出宝贵的意见,完善处理异常,
统一返回参数
    public class HeaderResult
    {
        public HeaderResult()
        {
            // ReSharper disable once VirtualMemberCallInConstructor
            IsSucceed = false;
        }
    public virtual bool IsSucceed { get; set; }
    public virtual string Message { get; set; }
    public virtual T Result { get; set; }
    public virtual string StatusCode { get; set; }
}
</pre>
创建一个过滤器
在过滤器中拦截异常信息,使用Log4net 记录日志到txt中,获取到异常信息统一返回给前端
public class ProjectExceptionFilter : IExceptionFilter
{
public void OnException(ExceptionContext context)
{
Exception exception = context.Exception;
var exceptionType = exception.GetType().ToString();
if (exceptionType == "ProjectCore.Common.DomainException")
{
//用来分类处理业务逻辑
}
//获取controller的名称
var controller = context.RouteData.Values["controller"].ToString();
//获取Action的名称
var action = context.RouteData.Values["Action"].ToString();
var errorPath = controller + "/" + action;
LogHelper.LogError("web service error:" + errorPath, exception);
//返回异常信息给前端
context.Result = new JsonResult(new HeaderResult<string>
{
Message = "错误路径:" + errorPath + ":错误信息" + exception.Message+"",
IsSucceed = false
});
//异常已处理了
context.ExceptionHandled = true;
}
}
</pre>
使用Log4net 记录日志到txt中 log4net.config网上有许多,这里就不贴出来了
public static class LogHelper
{
private static ILog _logger; static LogHelper()
{
ILoggerRepository repository = LogManager.CreateRepository("NETCoreRepository");
XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
LogHelper._logger = LogManager.GetLogger(repository.Name, "NETCorelog4net");
}
public static void LogError(string msg, Exception ex)
{
string errorMsg = string.Format("【抛出信息】:{0} <br/>【异常类型】:{1} <br/>【异常信息】:{2} <br/>【堆栈调用】:{3}", new object[] { msg,
ex.GetType().Name, ex.Message, ex.StackTrace });
errorMsg = errorMsg.Replace("\r\n", "<br>");
errorMsg = errorMsg.Replace("位置", "<strong style=\"color:red\">位置</strong>");
LogHelper._logger.Error(errorMsg);
}
public static void LogInfo(string msg)
{
LogHelper._logger.Info((object)msg);
}
public static void LogDebug(string msg)
{
LogHelper._logger.Debug((object)msg);
}
}
</pre>
在Startup 下面配置
services.AddMvc(options =>
{ options.Filters.Add(typeof(ProjectExceptionFilter));
options.Filters.Add(typeof(ModelVerificationFilter));
}).
SetCompatibilityVersion(CompatibilityVersion.Version_2_1).
AddJsonOptions(options =>
{
//忽略循环引用
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
//不使用驼峰样式的key
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
//设置时间格式
options.SerializerSettings.DateFormatString = "yyyy-MM-dd";
});
</pre>
第三节:使用Log4net和过滤器记录异常信息,返回异常给前端的更多相关文章
- springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。
		
springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑. 1.1 异常处理思路 系统中异常包括两类:预期异常和运行时异常RuntimeEx ...
 - Xamarin.Android-捕获未处理异常(全局异常)
		
一.前言 android中如果出现了未处理的异常,程序会闪退,这是非常不好的用户体验,很多用户会因此卸载APP,因此未处理的异常是应该尽力避免的. 有些很难避免的异常(如:IO.网络等),应在代码中进 ...
 - 基于springboot实现http响应异常信息国际化
		
背景 国际化是指在设计软件,将软件与特定语言及地区脱钩的过程.当软件被移植到不同的语言及地区时,软件本身不用做内部工程上的改变或修正. 本文提到的异常响应信息国际化是指:前端向后台发起请求,后台在处理 ...
 - 你真的会阅读Java的异常信息吗?
		
给出如下异常信息: java.lang.RuntimeException: level 2 exception at com.msh.demo.exceptionStack.Test.fun2(Tes ...
 - C#反射调用 异常信息:Ambiguous match found.
		
异常信息(异常类型:System.Reflection.AmbiguousMatchException)异常提示:Ambiguous match found.异常信息:Ambiguous match ...
 - .Net Core中间件和过滤器实现错误日志记录
		
1.中间件的概念 ASP.NET Core的处理流程是一个管道,中间件是组装到应用程序管道中用来处理请求和响应的组件. 每个中间件可以: 选择是否将请求传递给管道中的下一个组件. 可以在调用管道中的下 ...
 - Log4Net在MVC下的配置以及运用线程队列记录异常信息
		
Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件.数据库.EventLog等),日志就是程序的黑匣子,可以通过日志查看系统的运行过程,从而发现系统的问题.日志的作用:将运 ...
 - Spring拦截器和过滤器
		
什么是拦截器 拦截器(Interceptor): 用于在某个方法被访问之前进行拦截,然后在方法执行之前或之后加入某些操作,其实就是AOP的一种实现策略.它通过动态拦截Action调用的对象,允许开发者 ...
 - Spring Boot2(七):拦截器和过滤器
		
一.前言 过滤器和拦截器两者都具有AOP的切面思想,关于aop切面,可以看上一篇文章.过滤器filter和拦截器interceptor都属于面向切面编程的具体实现. 二.过滤器 过滤器工作原理 从上图 ...
 
随机推荐
- python学习——sys.argv
			
sys.argv[]:用于获取命令行参数,sys.argv[0]即所运行的代码自身的文件路径,因此真正的其他参数是从1开始 sys.argv[1]:表示第一个参数 sys.argv[1][2:]:表示 ...
 - Web Components 规范学习
			
最新的规范在这里:http://w3c.github.io/webcomponents/explainer/ 依据规范,有以下四个组成部分: Templates Custom Elements Sha ...
 - JAVA规则引擎JSR-94笔札
			
JAVA规则引擎JSR-94笔札 JSR-94 是由JCP(Java Community Process)组织所制定的java规则引擎API的java请求规范.它主要定义了规则引擎在java运行时的一 ...
 - LINQ to Entities 不支持 LINQ 表达式节点类型“ArrayIndex”。
			
错误原因: bool res1 = S_ROLE_MENU_PURVIEWCODE_Manage.Delete(c => c.MPC_CODE == strs[0]); linq不能写strs[ ...
 - vue-awesome-swiper插件
			
http://www.cnblogs.com/songrimin/p/6905136.html 这个地址不错 在上一些我的demo代码 第一步安装 npm install vue-awesome-sw ...
 - Loadrunner12.5-同一个网址通过vugen不能打开,但是直接在ie11中就可以打开
			
一:录制选项修改成“WinINet级别数据”,重新录制就可以成功打开网页了. 注:运行时设置--首选项--高级--“使用WinINet回放而非套接字(仅限Windows)”需要勾选上:否则录制脚本结束 ...
 - tmux配置与用法整理
			
tmux常用命令与快捷键 http://www.111cn.net/sys/linux/59058.htm http://www.360doc.com/content/13/0709/13/13047 ...
 - 微信分享 apicloud方式 中遇到的坎
			
1 appid填错了. 2 图片地址没写对,可能因为拼写问题,图片不存在 3 图片大小有限制.不能太大.
 - extjs  学习一
			
环境 : eclipse ext tomcat 6 将下载的extjs 解压后全部 导入到项目中 .使用时 <!-- 1.引入样式 2.引入库文件 ,底层驱动 3. ext-all--&g ...
 - Remove duplicates
			
https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...