1. 程式人生 > 實用技巧 >SLF4J日誌橋接的應用

SLF4J日誌橋接的應用

最近在給公司的測試部門開發一套自動化測試框架,為了是框架產生的測試報告更易於分析,我考慮將每一個用例與執行過程中產生的日誌相關聯,為了實現這樣的效果,首先就需要統一專案的日誌輸出,那麼具體怎麼做呢?

一、JAVA世界的日誌

在JAVA世界中,有非常多的日誌框架,JCL、JUL、Log4j、Logback等等,在一個JAVA專案所引用的依賴中,可能用到了各種各樣的日誌,比如一個自動化測試工程,用例本身可能會使用Logback打日誌,而它引用的專案組所提供的各種SDK又使用了JCL,這就導致一個專案使用了多種日誌框架,這樣就無法對日誌輸出進行統一。為了解決這個問題,SLF4J橋接器登場了。

二、SLF4J橋接包

正如上文所說,JAVA世界日誌眾多,非常混亂,各個日誌API互不相容,為了解決這一問題,log4j的作者創作了SLF4J, SLF4J採用門面模式定義了日誌操作的API,但是沒有具體實現,具體實現由使用者提供的jar包決定如log4j或logback,為了能讓之前的專案, 比如一個比較古老的專案使用了JCL, 也能使用SLF4J的API, 就出現了橋接的需求。SLF4J提供了多種橋接包,通過橋接包將其他日誌橋接到SLF4J,這樣 底層的日誌實現就可以隨便選了。

三、如何使用

這裡以JCL橋接為例說明橋接包的使用,比如我們的自動化專案所引用的一個SDK是使用JCL打日誌,那麼我們就需要exclude掉JCL,並引用slf4j-api與jcl-over-slf4j橋接包。日誌API統一之後再根據喜好引用具體的日誌框架。

<!--exclude-->
<dependency>
    <groupId>com.abc.demo</groupId>
    <artifactId>demo</artifactId>
    <version>${demo.version}</version>
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <
artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${sl4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.7.25</version> </dependency>