Logback,SLF4J,Log4J2。了解它們並學習如何使用。(翻譯)

  • 2020 年 3 月 14 日
  • 筆記

背景

如果您正在或在任何Java項目上工作,則可能已記錄了一些debug,error或info語句以進行調試或跟蹤。通過將庫記錄到磁盤或其他某種介質上的文件中來寫這些語句。
日誌記錄是任何項目的關鍵方面,因此已經編寫了各種框架。一些Java日誌記錄框架包括Log4j,logback,Apache通用日誌記錄,java.util.Logger等。所有這些日誌記錄器都將日誌記錄到文件或其他指定的介質中。

什麼是SLF4J

SLF4j代表Java的簡單日誌記錄外觀。顧名思義,它是一個外觀庫,為log4j,logback和java.util.logger等日誌記錄庫提供了抽象。而且不要做實際的記錄。
因此,針對Java的「基本上簡單的日誌記錄外觀」可以用作各種日誌記錄框架的簡單外觀或抽象,從而允許最終用戶在部署時插入所需的日誌記錄框架。
Log4j,Logback和java.util.Logger是日誌記錄庫,它們實際編寫日誌並具有各自的優缺點。作為行業標準的是Log4j2和logback。Log4j1.x已於2015年棄用。
因此出現了一個問題,為什麼要使用slf4j而不是直接使用log4j2或logback?
我們可以直接使用log4j2而不使用slf4j。但是您現在已鎖定到log4j2庫。因此,將來如果您想移至其他任何日誌記錄庫。您必須轉到所有Java文件並更改記錄器語句。
您已經開發了要與大量人員共享的庫或中間件。現在,他們還將使用具有自己的日誌記錄庫的Log4j2,而不是對庫和App使用通用的日誌記錄框架。
請記住,SLF4J不能替代Log4j;它只是一個門面。如果要開發庫或中間件,請使用SLF4J,使用庫的開發人員將根據其要求提供任何實現。

使用SLF4J作為,您的項目和記錄器之間的耦合鬆散

如果您直接在代碼中使用記錄器,則您的代碼可以直接訪問特定於記錄器的類。例如,如果使用Log4j,則應使用以下語句在所有類中檢索logger的實例。

import org.apache.log4j.Logger;  static final Logger LOGGER = Logger.getLogger(MyClass.class);

假設如果出於某些奇怪的原因要用JDK logger替換Log4j2,則必須打開所有9,836個Java類,並用JDK logger替換上面的語句。
如果將Log4j2與SLF4J一起使用,則唯一需要的是用 JDK記錄器綁定替換Log4j2 JAR文件(或maven依賴項)。您不想觸摸任何源文件來替換記錄器。

因此,現在您可以看到如果使用SLF4j,使用不同的日誌記錄庫是多麼容易。我們只是添加了log4j2 jar和SLF4j與Log4j2的綁定。它開始使用log4j2作為記錄器。我們還必須添加log4j2.xml進行配置。

因此,基本上,我們必須指定要使用的記錄器的綁定,並且可以使用相應的記錄器實現


因此,基本上,通過使用SLF4J和Various Bridges,我們可以使用自己想要的記錄器實現。

翻譯原文

https://medium.com/@krishankantsinghal/logback-slf4j-log4j2-understanding-them-and-learn-how-to-use-d33deedd0c46