如何使用不同的记录器实现配置SLF4J
將slf4j庫用作Java應用程序日志記錄API層有很多好處。 在這里,我將展示一些示例,說明如何與不同的記錄器一起使用和配置它。
您可以將slf4j視為Java接口,然后在運行時需要一個實現(僅一個)來提供實際的日志記錄詳細信息,例如寫入STDOUT或文件等。每個日志記錄實現(或稱為綁定)都將顯然,它們具有配置日志輸出的方式,但是您的應用程序將保持不可知狀態,并始終使用相同的org.slf4j.Logger API。 讓我們看看這在實踐中是如何工作的。
在簡單記錄器中使用
在pom.xml創建一個基于Maven的項目。
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.5</version></dependency>現在,您可以像這樣在Java代碼中使用Logger 。
package deng; import org.slf4j.*; public class Hello {static Logger LOGGER = LoggerFactory.getLogger(Hello.class);public static void main(String[] args) {for (int i = 0; i < 10; i++)if (i % 2 == 0)LOGGER.info("Hello {}", i);elseLOGGER.debug("I am on index {}", i);} }上面的代碼將編譯您的程序,但是當您運行它時,您將看到這些輸出。
bash> java deng.Hello SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.這就是說,在運行時,您缺少日志記錄“實現”(或記錄器綁定),因此slf4j僅使用“ NOP”實現,而沒有執行任何操作。 為了正確查看輸出,您可以嘗試使用根本不需要任何配置的簡單實現! 只需返回您的pom.xml并添加以下內容:
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.5</version></dependency>現在,您將看到在INFO級別的STDOUT上記錄輸出。 這個簡單的記錄器將默認顯示任何INFO級別或更高級別的消息。 為了查看DEBUG消息,您需要在Java啟動時傳遞此系統屬性-Dorg.slf4j.simpleLogger.defaultLogLevel=DEBUG 。
在Log4j記錄器中使用
現在,我們可以嘗試并交換不同的記錄器實現,但是您的應用程序代碼可以保持不變。 我們需要的是用另一個流行的記錄器實現(例如Log4j)替換slf4j-simple 。
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.5</version></dependency>同樣,我們必須為選擇的每個實現配置日志記錄。 在這種情況下,我們需要一個src/main/resources/log4j.properties文件。
log4j.rootLogger=DEBUG, STDOUTlog4j.logger.deng=INFOlog4j.appender.STDOUT=org.apache.log4j.ConsoleAppenderlog4j.appender.STDOUT.layout=org.apache.log4j.PatternLayoutlog4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n重新運行您的程序,您應該會看到類似的輸出。
將
JDK實際上附帶了一個記錄程序包,您可以使用此記錄程序實現替換pom.xml 。
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-jdk14</artifactId><version>1.7.5</version></dependency>現在,JDK日志記錄的配置有點難以使用。 不僅需要一個配置文件,例如src/main/resources/logging.properties ,而且您還需要添加一個系統屬性-Djava.util.logging.config.file=logging.properties ,以便它進行選擇。起來 這是一個入門的示例:
等級= INFO
handlers=java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.level=FINEST deng.level=FINEST結合使用
logback記錄器實現是超級dupa質量實現。 如果您打算編寫投入生產的嚴肅代碼,則可能需要評估此選項。 再次修改您的pom.xml以替換為:
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.0.13</version></dependency>這是開始配置的src/main/resources/logback.xml配置示例。
<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><logger name="deng" level="DEBUG"/><root level="INFO"><appender-ref ref="STDOUT" /></root> </configuration>使用
如果要提供供大型最終用戶使用的Java庫,則最好將項目設置為僅依賴slf4j-api ,然后讓用戶在其開發或運行時環境中選擇任何記錄器實現。 作為最終用戶,他們可以快速選擇上述選項之一,并充分利用自己喜歡的日志記錄實現功能。
資源資源
- http://slf4j.org/
- http://logging.apache.org/log4j/1.2/
- http://docs.oracle.com/javase/7/docs/technotes/guides/logging/
- http://logback.qos.ch/
翻譯自: https://www.javacodegeeks.com/2013/08/how-to-configure-slf4j-with-different-logger-implementations.html
總結
以上是生活随笔為你收集整理的如何使用不同的记录器实现配置SLF4J的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于Java和Scala同步的五件事你不
- 下一篇: 简单性与鲁棒性–在锁定文件处理中展示