您的位置:首页 > 编程语言 > Java开发

使用代理模式扩展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动态代理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 代理 logback
相关文章推荐