您现在的位置是:网站首页> 编程资料编程资料
ASP.NET MVC自定义异常过滤器使用案例_实用技巧_
2023-05-24
352人已围观
简介 ASP.NET MVC自定义异常过滤器使用案例_实用技巧_
在上一篇文章中讲解了自定义异常过滤器,这篇文章会结合工作中的真实案例讲解一下如何使用自定义异常过滤器。
一、需求
本案例要实现的功能需求:在发生异常时记录日志,日志内容包括发生异常的Controller名称、Action名称、使用浏览器类型和版本等。
二、案例
1、创建工具类
首先创建项目中需要使用的工具类。
1.1、创建日志工具类
在案例中使用Log4net来记录日志。首先要添加对Log4net的引用,直接在NuGet里面搜索Log4net,然后安装即可。
日志消息实体类代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace MVCCuetomerExcepFilterDemo.Models { /// /// 日志消息实体类 /// public class LogMessageEntity { /// /// 操作时间 /// public DateTime OperationTime { get; set; } /// /// Url地址 /// public string Url { get; set; } /// /// 类名 /// public string Class { get; set; } /// /// IP /// public string Ip { get; set; } /// /// 主机 /// public string Host { get; set; } /// /// 浏览器 /// public string Browser { get; set; } /// /// 操作人 /// public string UserName { get; set; } /// /// 内容 /// public string Content { get; set; } /// /// 异常信息 /// public string ExceptionInfo { get; set; } /// /// 异常来源 /// public string ExceptionSource { get; set; } /// /// 异常信息备注 /// public string ExceptionRemark { get; set; } } }创建日志级别枚举类型,分别对应Log4net中的日志级别,代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Web; namespace MVCCuetomerExcepFilterDemo.Models.Enums { /// /// 日志级别 /// public enum LogLevel { /// /// 错误 /// [Description("错误")] Error, /// /// 警告 /// [Description("警告")] Warning, /// /// 信息 /// [Description("信息")] Info, /// /// 调试 /// [Description("调试")] Debug } }创建一个对日志格式进行格式化的类,代码如下:
using MVCCuetomerExcepFilterDemo.Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; namespace MVCCuetomerExcepFilterDemo.Util { /// /// 日志格式器 /// public class LogFormat { /// /// 生成错误 /// /// 对象 /// public string ErrorFormat(LogMessageEntity logMessage) { StringBuilder strInfo = new StringBuilder(); strInfo.Append("1. 错误: >> 操作时间: " + logMessage.OperationTime + " 操作人: " + logMessage.UserName + " \r\n"); strInfo.Append("2. 地址: " + logMessage.Url + " \r\n"); strInfo.Append("3. 类名: " + logMessage.Class + " \r\n"); strInfo.Append("4. Ip : " + logMessage.Ip + " 主机: " + logMessage.Host + " 浏览器: " + logMessage.Browser + " \r\n"); strInfo.Append("5. 内容: " + logMessage.Content + "\r\n"); strInfo.Append("-----------------------------------------------------------------------------------------------------------------------------\r\n"); return strInfo.ToString(); } /// /// 生成警告 /// /// 对象 /// public string WarnFormat(LogMessageEntity logMessage) { StringBuilder strInfo = new StringBuilder(); strInfo.Append("1. 警告: >> 操作时间: " + logMessage.OperationTime + " 操作人: " + logMessage.UserName + " \r\n"); strInfo.Append("2. 地址: " + logMessage.Url + " \r\n"); strInfo.Append("3. 类名: " + logMessage.Class + " \r\n"); strInfo.Append("4. Ip : " + logMessage.Ip + " 主机: " + logMessage.Host + " 浏览器: " + logMessage.Browser + " \r\n"); strInfo.Append("5. 内容: " + logMessage.Content + "\r\n"); strInfo.Append("-----------------------------------------------------------------------------------------------------------------------------\r\n"); return strInfo.ToString(); } /// /// 生成信息 /// /// 对象 /// public string InfoFormat(LogMessageEntity logMessage) { StringBuilder strInfo = new StringBuilder(); strInfo.Append("1. 信息: >> 操作时间: " + logMessage.OperationTime + " 操作人: " + logMessage.UserName + " \r\n"); strInfo.Append("2. 地址: " + logMessage.Url + " \r\n"); strInfo.Append("3. 类名: " + logMessage.Class + " \r\n"); strInfo.Append("4. Ip : " + logMessage.Ip + " 主机: " + logMessage.Host + " 浏览器: " + logMessage.Browser + " \r\n"); strInfo.Append("5. 内容: " + logMessage.Content + "\r\n"); strInfo.Append("-----------------------------------------------------------------------------------------------------------------------------\r\n"); return strInfo.ToString(); } /// /// 生成调试 /// /// 对象 /// public string DebugFormat(LogMessageEntity logMessage) { StringBuilder strInfo = new StringBuilder(); strInfo.Append("1. 调试: >> 操作时间: " + logMessage.OperationTime + " 操作人: " + logMessage.UserName + " \r\n"); strInfo.Append("2. 地址: " + logMessage.Url + " \r\n"); strInfo.Append("3. 类名: " + logMessage.Class + " \r\n"); strInfo.Append("4. Ip : " + logMessage.Ip + " 主机: " + logMessage.Host + " 浏览器: " + logMessage.Browser + " \r\n"); strInfo.Append("5. 内容: " + logMessage.Content + "\r\n"); strInfo.Append("-----------------------------------------------------------------------------------------------------------------------------\r\n"); return strInfo.ToString(); } /// /// 生成异常信息 /// /// 对象 /// public string ExceptionFormat(LogMessageEntity logMessage) { StringBuilder strInfo = new StringBuilder(); strInfo.Append("1. 调试: >> 操作时间: " + logMessage.OperationTime + " 操作人: " + logMessage.UserName + " \r\n"); strInfo.Append("2. 地址: " + logMessage.Url + " \r\n"); strInfo.Append("3. 类名: " + logMessage.Class + " \r\n"); strInfo.Append("4. 主机: " + logMessage.Host + " Ip : " + logMessage.Ip + " 浏览器: " + logMessage.Browser + " \r\n"); strInfo.Append("5. 异常: " + logMessage.ExceptionInfo + "\r\n"); //strInfo.Append("6. 来源: " + logMessage.ExceptionSource + "\r\n"); //strInfo.Append("7. 实例: " + logMessage.ExceptionRemark + "\r\n"); strInfo.Append("-----------------------------------------------------------------------------------------------------------------------------\r\n"); return strInfo.ToString(); } } }创建日志类,代码如下:
using log4net; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace MVCCuetomerExcepFilterDemo.Util { /// /// 日志 /// public class Log { private ILog logger; public Log(ILog log) { this.logger = log; } public void Debug(object message) { this.logger.Debug(message); } public void Error(object message) { this.logger.Error(message); } public void Info(object message) { this.logger.Info(message); } public void Warn(object message) { this.logger.Warn(message); } } }创建日志初始化类,代码如下:
using log4net; using MVCCuetomerExcepFilterDemo.Models; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; namespace MVCCuetomerExcepFilterDemo.Util { /// /// 日志初始化 /// public class LogFactory { static LogFactory() { FileInfo configFile = new FileInfo(HttpContext.Current.Server.MapPath("/XmlConfig/log4net.config")); log4net.Config.XmlConfigurator.Configure(configFile); } public static Log GetLogger(Type type) { return new Log(LogManager.GetLogger(type)); } public static Log GetLogger(string str) { return new Log(LogManager.GetLogger(str)); } } }最后添加log4net的配置文件:
提示: 本文由神整理自网络,如有侵权请联系本站删除!
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!
相关内容
- ASP.NET MVC自定义异常过滤器_实用技巧_
- ASP.NET MVC授权过滤器用法_实用技巧_
- ASP.NET MVC实现区域路由_实用技巧_
- .NET 6中为record类型自定义Equals方法_实用技巧_
- 编译 dotnet和aspnetcore 源代码详情_实用技巧_
- ynamic LINQ创建高级查询服务_实用技巧_
- .NET中的HashSet及原理解析_实用技巧_
- .NET 6新特性试用之TryGetNonEnumeratedCount 方法_实用技巧_
- .NET 6新特性试用之System.Text.Json功能改进_实用技巧_
- .NET 6新特性试用之常量内插字符串_实用技巧_
点击排行
本栏推荐
