使用代理模式扩展logback,实现自定义的日志记录功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mada26/article/details/70796267

1:jdk动态代理:代理类和目标类实现相同的接口。

cglib代理:代理类是目标类的子类(因此cglib要代理的类不可以是final类,要代理的方法不可以是final方法)。

2:cglib代理本质上是通过动态的生成一个子类,去覆盖所要代理类中不是final的方法,并设置好callback回调,则原有类的每个方法调用都会转变成调用用户定义的拦截方法(interceptor)。

3:使用代理模式(jdkProxy和cglib都可以)扩展logback,实现自定义的日志记录功能:思路就是在调用org.slf4j.Logger接口的debug,info等方法时通过代理对LOGGER做一些处理(实现运行时植入新特性的功能)。本文即是在代理时,通过设置一个新的org.slf4j.Logger接口的实现类(如ch.qos.logback.classic.Logger)来实现自定义的日志记录功能。

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:LogUtil

参考文章:JDK的动态代理为什么必须要使用接口与使用CGLIB动态代理

猜你喜欢

转载自blog.csdn.net/mada26/article/details/70796267