1. 程式人生 > 其它 >《手把手教你》系列基礎篇(八十九)-java+ selenium自動化測試-框架設計基礎-Logback實現日誌輸出-上篇(詳解教程)

《手把手教你》系列基礎篇(八十九)-java+ selenium自動化測試-框架設計基礎-Logback實現日誌輸出-上篇(詳解教程)

1.簡介

 今天講解和分享這篇文章主要是由於log4j2前段時間新聞發現 Apache Log4j2 近日被公開的遠端程式碼執行漏洞在全球引起了重大影響:https://www.oschina.net/news/172999,因此可以用logback日誌框架替換一下。slf4j是Java的簡單日誌門面API,很多日誌實現都可以與之整合,如JDK logging (java.util.logging), log4j和logback。優點是程式碼裡不會有具體的日誌實現類,減少侵入。與log4j相比,logback具有一些優勢,如更好的效能、更少的記憶體使用、自動重載入配置檔案以及過濾功能等。

2.Logback簡介

Logback 是由 log4j 創始人設計的又一個開源日誌元件,作為流行的 log4j 專案的後續版本,從而替代 log4j。

logback一個開源日誌元件

logback效能是log4j效能的10倍以上

logback的配置,需要配置輸出源appender,打日誌的loger(子節點)和root(根節點),實際上,它輸出日誌是從子節點開始,子節點如果有輸出源直接輸入,如果無,判斷配置的addtivity,是否像上級傳遞,即是否向root傳遞,傳遞則採用root的輸出源,否則不輸出日誌。

Logback 的體系結構足夠通用,以便在不同情況下應用。 目前,logback 分為三個模組:logback-core,logback-classic和logback-access。

logback-core:模組為其他兩個模組的基礎。

logback-classic:模組可以被看做是log4j的改進版本。此外,logback-classic 本身實現了 SLF4J API,因此可以在 logback 和其他日誌框架(如 log4j 或 java.util.logging(JUL))之間來回切換。

logback-access:模組與 Servlet 容器(如 Tomcat 和 Jetty)整合,以提供 HTTP 訪問日誌功能。

3.配置檔案

Logger:日誌的記錄器,把它關聯到應用的對應的context上後,主要用於存放日誌物件,也可以定義日誌型別、級別。

Appender:主要用於指定日誌輸出的目的地,目的地可以是控制檯、檔案、遠端套接字伺服器、 MySQL、PostreSQL、 Oracle和其他資料庫、 JMS和遠端UNIX Syslog守護程序等。

Layout 負責把事件轉換成字串,格式化的日誌資訊的輸出。

4.準備演示環境

4.1準備工作

1.下載logback的jar包地址:https://logback.qos.ch/download.html 巨集哥可以通過下載地址下載版本是1.2.9。如下圖所示:

(1)logback-access-1.1.9.jar

(2)logback-classic-1.1.9.jar

(3)logback-core-1.1.9.jar

2.下載slf4j-api的jar包地址:https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/ 巨集哥可以通過下載地址下載版本是1.7.25。如下圖所示:

3.下載好了之後,將jar包新增到Eclipse專案中去。如下圖所示:

4.在當前專案新建一個logback.xml的檔案,如下圖所示:

5.專案實戰

5.1日誌輸出到控制檯

1.新建logback.xml或logback-test.xml(優先順序高)檔案中新增如下圖所示內容:

2.logback.xml參考程式碼

<?xml version="1.0" encoding="UTF-8"?>  
  
<configuration>  
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
        <!-- encoder的預設實現類是ch.qos.logback.classic.encoder.PatternLayoutEncoder -->  
        <encoder>  
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>  
        </encoder>  
    </appender>  
  
    <!-- name值可以是包名或具體的類名:該包(包括子包)下的類或該類將採用此logger -->  
    <logger name="testSuites.TestLogback" level="INFO">  
        <appender-ref ref="STDOUT" />  
    </logger>  
      
    <!-- root的預設level是DEBUG -->  
    <root level="DEBUG">  
        <appender-ref ref="STDOUT" />  
    </root>  
</configuration>  

3.新建一個測試類:TestLogback,測試日誌輸出到控制檯。

5.2程式碼設計

5.3參考程式碼

package testSuites;

import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Logger;

/**
 * @author 北京-巨集哥
 * 
 * @公眾號:北京巨集哥
 * 
 * 《手把手教你》系列基礎篇(八十九)-java+ selenium自動化測試-框架設計基礎-Logback實現日誌輸出(詳解教程)
 *
 * 2022年3月26日
 */

public class TestLogback {
    
    private static final Logger log = (Logger) LoggerFactory.getLogger(TestLogback.class);  
    
    public void reconciliate() {  
        String name = "conciliate";  
        log.info("Hello from reconciliate");  
        log.debug("My name is {}", name);  
    } 
    public static void main(String[] args) {
        
        TestLogback t = new  TestLogback();
        t.reconciliate();
    }
}

5.4執行程式碼

1.執行程式碼,右鍵Run AS->Java Appliance,控制檯輸出,如下圖所示:

從上圖可以看出控制檯中的reconciliate中的日誌會列印兩次,這是因為所有logger的始祖是ROOT,預設會繼承ROOT的配置。

解決:logger的additivity屬性設定為false

2.修改後執行程式碼,右鍵Run AS->Java Appliance,控制檯輸出,如下圖所示:

 從上圖可以看出控制檯中的reconciliate中的日誌列印了一次,問題解決了。

6.小結

下載的logback各類jar版本需一致。

  好了,時間也不早了,今天就分享和講解到這裡,希望對您有所幫助,感謝您耐心地閱讀!