《手把手教你》系列基礎篇(八十九)-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 分為三個模組: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版本需一致。
好了,時間也不早了,今天就分享和講解到這裡,希望對您有所幫助,感謝您耐心地閱讀!