1. 程式人生 > >使用代理模式擴充套件logback,實現自定義的日誌記錄功能

使用代理模式擴充套件logback,實現自定義的日誌記錄功能

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動態代理