使用代理模式扩展logback,实现自定义的日志记录功能
2017-04-26 13:26
1501 查看
1:jdk动态代理:代理类和目标类实现相同的接口。
cglib代理:代理类是目标类的子类(因此cglib要代理的类不可以是final类,要代理的方法不可以是final方法)。
2:cglib代理本质上是通过动态的生成一个子类,去覆盖所要代理类中不是final的方法,并设置好callback回调,则原有类的每个方法调用都会转变成调用用户定义的拦截方法(interceptor)。
3:使用代理模式(jdkProxy和cglib都可以)扩展logback,实现自定义的日志记录功能:思路就是在调用[b]org.slf4j.Logger接口的debug,info等方法时通过代理对LOGGER做一些处理(实现运行时植入新特性的功能)。本文即是在代理时,通过设置一个新的org.slf4j.Logger接口的实现类(如ch.qos.logback.classic.Logger)来实现自定义的日志记录功能。[/b]
4:本文通过实现了一个自定义的文件和行数解析器MyFileAndLineConverter来替代logback源码中ch.qos.logbak.classic.pattern包下的FileOfCallerConverter和LileOfCallerConverter解析器。并在logback.xml中引入这个自定义的解析器。
logback.xml的<configuration />中定义myFileAndLineConverter:
<conversionRule conversionWord="myFileAndLineConverter"
converterClass="com.common.util.log.MyFileAndLineConverter" />
在<appender
/>中引用[%myFileAndLineConverter]
5具体实现见我的github:https://github.com/madayiban/common/tree/master/src/main/java/com/common/util/log
参考文章:JDK的动态代理为什么必须要使用接口与使用CGLIB动态代理
cglib代理:代理类是目标类的子类(因此cglib要代理的类不可以是final类,要代理的方法不可以是final方法)。
2:cglib代理本质上是通过动态的生成一个子类,去覆盖所要代理类中不是final的方法,并设置好callback回调,则原有类的每个方法调用都会转变成调用用户定义的拦截方法(interceptor)。
3:使用代理模式(jdkProxy和cglib都可以)扩展logback,实现自定义的日志记录功能:思路就是在调用[b]org.slf4j.Logger接口的debug,info等方法时通过代理对LOGGER做一些处理(实现运行时植入新特性的功能)。本文即是在代理时,通过设置一个新的org.slf4j.Logger接口的实现类(如ch.qos.logback.classic.Logger)来实现自定义的日志记录功能。[/b]
4:本文通过实现了一个自定义的文件和行数解析器MyFileAndLineConverter来替代logback源码中ch.qos.logbak.classic.pattern包下的FileOfCallerConverter和LileOfCallerConverter解析器。并在logback.xml中引入这个自定义的解析器。
logback.xml的<configuration />中定义myFileAndLineConverter:
<conversionRule conversionWord="myFileAndLineConverter"
converterClass="com.common.util.log.MyFileAndLineConverter" />
在<appender
/>中引用[%myFileAndLineConverter]
5具体实现见我的github:https://github.com/madayiban/common/tree/master/src/main/java/com/common/util/log
参考文章:JDK的动态代理为什么必须要使用接口与使用CGLIB动态代理
相关文章推荐
- 装饰者模式---使用装饰者模式实现带日志记录功能的数据库命令执行类
- Spring boot使用logback实现日志的记录
- spring mvc 使用拦截器interceptor和自定义Log类实现持久层记录日志
- 从头认识Spring-3.8 简单的AOP日志实现(注解版)-扩展添加检查订单功能,以便记录并检測输入的參数
- 使用自定义注解+Spring AOP 实现日志记录
- java使用动态代理来实现AOP(日志记录)的实例代码
- SpringBoot使用自定义注解+拦截器 实现日志记录
- java使用动态代理来实现AOP(日志记录)
- 从头认识Spring-3.4 简单的AOP日志实现-扩展增加检查订单功能,以便记录并检测输入的参数
- 从头认识Spring-3.4 简单的AOP日志实现-扩展添加检查订单功能,以便记录并检測输入的參数
- java 使用redis记录logback日志,由自定义Appender与Jedis的使用实现。
- Python实现日志自动记录功能(一个思路代码,详细可以自己扩展)
- Java使用注解和动态代理实现方法调用时的日志记录示例
- java使用动态代理来实现AOP(日志记录)的实例代码
- easyui自定义扩展视图实现功能--------datagrid返回记录为0时显示“没有记录”
- java动态代理详解,并用动态代理和注解实现日志记录功能
- [EntLib]微软企业库5.0 学习之路——第九步、使用PolicyInjection模块进行AOP—PART4——建立自定义Call Handler实现用户操作日志记录
- 微软企业库5.0 学习之路——第九步、使用PolicyInjection模块进行AOP—PART4——建立自定义Call Handler实现用户操作日志记录
- Spring 自定义注解实现操作日志记录功能
- 使用Aop面向切面技术实现记录详细操作日志功能