PostSharp AOP编程:1.基于PostSharp的AOP日志记录和异常捕捉【附带源码】
2011-11-21 11:29
525 查看
AOP(基于切面编程):它是对业务逻辑的分离,使各个业务直接的耦合变低,比如在传统的OOP编程中将日志记录、异常处理、权限管理等方面剥离出来。在今后的维护过程中,对其改变日志记录、异常处理、权限管理方法的时候,不用去改变主业务流程逻辑代码。提高开发效率。
PostSharp采用特性的方式来对编译后的主业务流程方法逻辑横向静态注入截取数据。下面我们将以一个实例来演示如何使用PostSharp实现AOP进行日志记录和异常处理。
首先需要安装PostSharp 2.1.4.1免费版本,这个版本只是功能相对较少,可商用,能够满足日志记录和异常截取的要求。点击PostSharp-2.1.4.1 下载.
然后新建一个控制台项目并将PostSharp.dll引入该项目中。编写一个截取日志的特性LogsAttributes.cs。
再看看当出现异常时通过try{} catch{}处理异常,ExceptionAttribute.cs类捕捉并且处理异常:
在客户端编写两个方法来测试PostSharp是否静态注入并且捕获到相关信息,代码如下:
下面是项目运行效果,如需源码请点击 PostSharpAOP.zip 下载。
PostSharp采用特性的方式来对编译后的主业务流程方法逻辑横向静态注入截取数据。下面我们将以一个实例来演示如何使用PostSharp实现AOP进行日志记录和异常处理。
首先需要安装PostSharp 2.1.4.1免费版本,这个版本只是功能相对较少,可商用,能够满足日志记录和异常截取的要求。点击PostSharp-2.1.4.1 下载.
然后新建一个控制台项目并将PostSharp.dll引入该项目中。编写一个截取日志的特性LogsAttributes.cs。
//日志特性截取类 [Serializable] [AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = true)] class LogsAttribute:OnMethodBoundaryAspect { ///<summary> /// 入口参数信息 ///</summary> public string EntryText { get; set; } ///<summary> /// 出口参数信息 ///</summary> public string ExitText { get; set; } ///<summary> /// 异常信息 ///</summary> public string ExceptionText { get; set; } //进入函数时输出函数的输入参数 public override void OnEntry(MethodExecutionArgs eventArgs) { Arguments arguments = eventArgs.Arguments; StringBuilder sb = new StringBuilder(); ParameterInfo[] parameters = eventArgs.Method.GetParameters(); for (int i = 0; arguments != null && i < arguments.Count; i++) { //进入的参数的值 sb.Append( parameters[i].Name + "=" + arguments[i] + ""); } string message = string.Format("{0}.{1} Method. The Entry Arg Is:{2}", eventArgs.Method.DeclaringType.FullName, eventArgs.Method.Name, sb.ToString()); Console.WriteLine(message); } //退出函数时的函数返回值 public override void OnExit(MethodExecutionArgs eventArgs) { Console.WriteLine(string.Format("{0}.{1} Method. The Result Is:{2}", eventArgs.Method.DeclaringType.FullName, eventArgs.Method.Name, eventArgs.ReturnValue.ToString())); } //函数发生异常时记录异常信息 public override void OnException(MethodExecutionArgs eventArgs) { Console.WriteLine(string.Format("{0}.{1} Method. The Exception Is:{2}", eventArgs.Method.DeclaringType.FullName, eventArgs.Method.Name, eventArgs.Exception.Message)); } }
再看看当出现异常时通过try{} catch{}处理异常,ExceptionAttribute.cs类捕捉并且处理异常:
//截取异常并且处理异常 [Serializable] [AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = true)] class ExceptionAttribute:MethodInterceptionAspect { //调用本函数时截取异常 public override void OnInvoke(MethodInterceptionArgs args) { try { base.OnInvoke(args); } catch(Exception ex) { Console.WriteLine(string.Format("此方法异常信息是:{0}", ex.ToString())); } } }
在客户端编写两个方法来测试PostSharp是否静态注入并且捕获到相关信息,代码如下:
class Program { static void Main(string[] args) { Add(3, 5); Console.WriteLine("-------------------------------------------------------"); Subject(5, 12); Console.ReadLine(); } //此函数让我们看其输入参数和返回值的日志记录 [Logs] [Exception] public static int Add(int a, int b) { return a + b; } //此函数看我们的异常通过自定义Exception特性记录下来 [Logs] [Exception] public static int Subject(int a, int b) { throw new ArgumentException("减法出现异常,需要处理"); return a - b; } }
下面是项目运行效果,如需源码请点击 PostSharpAOP.zip 下载。
相关文章推荐
- PostSharp AOP编程:1.基于PostSharp的AOP日志记录和异常捕捉【附带源码】
- Spring AOP 基于注解的AOP 实现 记录日志,异常捕获
- 基于schema的AOP,实现日志记录Demo
- Filter (3)【日志记录与异常捕捉】
- springboot aop 自定义注解方式实现一套完善的日志记录(完整源码)
- SpringMVC中基于AOP的自定义注解记录日志
- C# Asp.net中的AOP框架 Microsoft.CCI, Mono.Cecil, Typemock Open-AOP API, PostSharp -摘自网络 (可以利用反射 Attribute 进行面向切面编程 可以用在记录整个方法的Log方面)
- 基于Spring AOP和Groovy日志模板配置的日志记录框架的二次实现与使用案例
- spring用aop记录异常日志
- 基于.NET的AOP开源框架PostSharp 1.0 beta发布
- 基于.NET的AOP开源框架PostSharp 1.0 beta发布
- spring aop基于自定义注解做日志记录
- 通过spring aop记录日志信息(异常)
- Asp.Net : 捕捉和记录网站中出现的所有未处理错误,抛出详细的页面来源和访问ip,调用的接口方法及异常实例(记事本日志,系统日志及数据库日志)
- 基于AOP的一个操作记录保存日志
- 基于PostSharp的AOP框架设计
- spring aop 切面记录log4j日志 之around记录异常信息
- 利用Spring AOP实现业务和异常日志记录
- 基于SSM利用SpringAOP切面及自定义注解 记录每次操作记录(操作日志 同理)
- SSM框架 基于spring-AOP 实现requet参数日志记录