學(xué)習(xí)記錄之SLF4J框架
關(guān)于日志:
????為什么要使用日志:
????如果始終使用`System.out.println()`類似的輸出語句來輸出某些信息,在開發(fā)過程中,可能是無所謂的,但是,當(dāng)項目開發(fā)完成后,這些信息不應(yīng)該再被顯示,如果使用刪除源代碼、注釋源代碼的做法,則工作量較大,也不利于后續(xù)可能需要進行的功能更新或維護。
????使用日志,可以根據(jù)級別進行輸出,并根據(jù)不同的運行環(huán)境(開發(fā)環(huán)境、交付后的生產(chǎn)環(huán)境)來設(shè)置不同的顯示級別,以保證某些信息只在開發(fā)過程中是被輸出且可見的,而這些信息在交付后的生產(chǎn)環(huán)境中將不可見。
日志的基本使用:
????????在Spring Boot項目中,當(dāng)添加了`Lombok`依賴后,可以在任意類上添加`@Slf4j`注解,則可以在類中使用名為`log`的變量調(diào)用方法來輸出日志(此變量是在編譯期由`Lombok`添加的)。
調(diào)用輸出日志的方法時,建議使用的方法是:
即:第1個參數(shù)是字符串,表示需要輸出的內(nèi)容,但此字符串的各變量值均使用`{}`作為占位符,然后,第2個參數(shù)是可變參數(shù),是`Object`類型的,則第1個參數(shù)的字符串值中的各占位符對應(yīng)的值均使用第2個參數(shù)依次表示。
使用示例:
日志的級別:
在SLF4j中,日志的可顯示級別,從信息的重要程度,從低到高依次為:
`trace`:跟蹤信息
`debug`:調(diào)試
`info`:一般信息
?`warn`:警告
?`error`:錯誤
以上5個級別在使用`log`變量輸出日志時都有對應(yīng)的方法,方法名稱就是這5個級別的名稱,且這5個級別的方法的重載都是相同的!
根據(jù)調(diào)用的方法不同,輸出的日志的級別就不同,例如,當(dāng)調(diào)用`info()`系列方法(重載的多個方法)時,輸出的日志就是`info`級別的,當(dāng)調(diào)用`debug()`系列方法時,輸出的日志就是`debug()`級別的。
在Spring Boot項目中,在`application.properties`中,使用以下語法可以設(shè)置日志的顯示級別:
以上配置就可以將指定的類中的日志設(shè)置為指定的顯示級別。
也可以配置為:
以上配置就可以將指定的包及其子孫包中所有類的日志設(shè)置為指定的顯示級別。
一旦設(shè)置顯示級別后,將顯示設(shè)置級別及更重要的級別的日志,例如,設(shè)置為`debug`時,將顯示`debug`、`info`、`warn`、`error`都將顯示,如果設(shè)置為`warn`時,將只顯示`warn`、`error`級別的日志。
?日志的優(yōu)點主要有:
?????可以配置來控制日志的顯示級別
????日志的文本會被緩存,多次執(zhí)行時,輸出效率更高
????在進階使用中,還可以將日志輸出到指定的其它位置,例如文件、數(shù)據(jù)庫等
關(guān)于SLF4j與其它日志框架:
????`log4j`、`logback`等日志框架都是比較主流的日志框架,而`SLF4j`是一套標(biāo)準(zhǔn),它并沒有具體的實現(xiàn)日志的功能,所以,`SLF4j`與`log4j` / `logback`等更像是一個接口與實現(xiàn)類的關(guān)系(本質(zhì)并不是)。