使用SLF4J和Logback
前面介紹了Commons Logging
和Log4j
這一對好基友,它們一個負(fù)責(zé)充當(dāng)日志 API,一個負(fù)責(zé)實現(xiàn)日志底層,搭配使用非常便于開發(fā)。
有的童鞋可能還聽說過SLF4J
和Logback
。這兩個東東看上去也像日志,它們又是啥?
其實SLF4J
類似于Commons Logging
,也是一個日志接口,而Logback
類似于Log4j
,是一個日志的實現(xiàn)。
為什么有了Commons Logging
和Log4j
,又會蹦出來SLF4J
和Logback
?這是因為Java有著非常悠久的開源歷史,不但OpenJDK
本身是開源的,而且我們用到的第三方庫,幾乎全部都是開源的。開源生態(tài)豐富的一個特定就是,同一個功能,可以找到若干種互相競爭的開源庫。
因為對Commons Logging
的接口不滿意,有人就搞了SLF4J
。因為對Log4j
的性能不滿意,有人就搞了Logback
。
我們先來看看SLF4J
對Commons Logging
的接口有何改進(jìn)。在Commons Logging
中,我們要打印日志,有時候得這么寫:
int score = 99;
p.setScore(score);
log.info("Set score " + score + " for Person " + p.getName() + " ok.");
拼字符串是一個非常麻煩的事情,所以SLF4J的日志接口改進(jìn)成這樣了:
int score = 99;
p.setScore(score);
logger.info("Set score {} for Person {} ok.", score, p.getName());
我們靠猜也能猜出來,SLF4J
的日志接口傳入的是一個帶占位符的字符串,用后面的變量自動替換占位符,所以看起來更加自然。
如何使用SLF4J
?它的接口實際上和Commons Logging
幾乎一模一樣:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
class Main {
final Logger logger = LoggerFactory.getLogger(getClass());
}
對比一下Commons Logging
和SLF4J
的接口:
Commons Logging SLF4J
org.apache.commons.logging.Log org.slf4j.Logger
org.apache.commons.logging.LogFactory org.slf4j.LoggerFactory
不同之處就是Log
變成了Logger
,LogFactory
變成了LoggerFactory
。
使用SLF4J
和Logback
和前面講到的使用Commons Logging
加Log4j
是類似的,先分別下載SLF4J
和Logback
,然后把以下jar包放到classpath下:
slf4j-api-1.7.x.jar
logback-classic-1.2.x.jar
logback-core-1.2.x.jar
然后使用SLF4J的Logger和LoggerFactory即可。和Log4j類似,我們?nèi)匀恍枰粋€Logback的配置文件,把logback.xml放到classpath下,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<file>log/output.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>log/output.log.%i</fileNamePattern>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>1MB</MaxFileSize>
</triggeringPolicy>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
運行即可獲得類似如下的輸出:
13:15:25.328 [main] INFO com.itranswarp.learnjava.Main - Start process...
從目前的趨勢來看,越來越多的開源項目從Commons Logging加Log4j轉(zhuǎn)向了SLF4J加Logback。
小結(jié)
SLF4J
和 Logback
可以取代Commons Logging
和Log4j
;文章來源:http://www.zghlxwxcb.cn/news/detail-651306.html
始終使用SLF4J
的接口寫入日志,使用Logback
只需要配置,不需要修改代碼。文章來源地址http://www.zghlxwxcb.cn/news/detail-651306.html
到了這里,關(guān)于【Java】異常處理 之 使用SLF4J 和 Logback的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!