JAVA 開發(fā)中冒签,一個離不開的東西就是日志,當在本地開發(fā)時笔诵,想要找到一些引起B(yǎng)UG 的問題點返吻,我們可以通過DEBUG的形式,但是一旦項目上線乎婿,我們可能就沒辦法直接追蹤問題测僵,這時就需要一些工具幫我們把項目運行中一些數(shù)據(jù)打印保存下來,方便問題分析定位谢翎。
沒有日志框架怎么辦
記得剛開始開發(fā)JAVA 時捍靠,我們一定都用過System.out.println()做過打印的事情,其實森逮,這樣也不是不可以榨婆,但是一個日志框架要做的,其實并不只是打印輸出數(shù)據(jù)褒侧,他可能還需要具有以下一些功能
- 可以持久化纲辽,無論是磁盤文件,還是數(shù)據(jù)庫等
- 如果是持久化到磁盤文件璃搜,可以自定義分割,比如超過10M自動分割鳞上,防止單個日志文件過大这吻。
- 可以控制輸出級別。比如有些日志我只要在測試環(huán)境的時候才打印篙议,而正式上線唾糯,則不打印怠硼。
還有一點,因為System.out.println() 底層是用到了synchronized 關(guān)鍵字移怯,可能會導致一些性能問題
常見的日志框架
JAVA 開發(fā)中香璃,大家也一定用到很多日志框架,常見的主要有以下這些舟误。
- JDKLog
- Log4J
- LogBack
- SLF4J
JDKLog
JDKLog 是JDK自帶的日志框架葡秒,不需要引入任何的第三方包就可以直接使用,使用方法如下
import java.util.logging.Logger;
Logger logger = Logger.getLogger("JDKLog");
logger.info("Hello World.");
運行后輸出
Log4J
Log4J 是Apache基金開源的日志框架嵌溢,他可以實現(xiàn)控制日志輸出目的地眯牧,控制輸出格式等等。
Log4J 實際上分了Log4J 和 Log4J2赖草,下面演示下Log4J的使用方法
先引入相關(guān)包
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
然后項目中使用
import org.apache.log4j.Logger;
Logger logger = Logger.getLogger(JLog.class);
logger.info(" info ");
logger.debug(" debug ");
logger.error(" error ");
但是如果直接是在普通的maven 項目中使用学少,可能會出現(xiàn)如下錯誤:
log4j:WARN No appenders could be found for logger (log.JLog).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
因為log4j 需要配置一些東西才可以,我們可以在項目的resources目錄下建立 log4j.properties文件秧骑,然后
寫入如下配置
log4j.rootLogger=ALL, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
這樣版确,就可以順利打印了,結(jié)果如下
LogBack
LogBack 是在log4j 之后的一個日志框架乎折,實際上是同一個人開發(fā)的绒疗,主要是重寫了內(nèi)核,比log4j在性能上更加的好笆檀,以下介紹摘自百度百科:
Logback是由log4j創(chuàng)始人設(shè)計的又一個開源日志組件忌堂。logback當前分成三個模塊:logback-core,logback- classic和logback-access。logback-core是其它兩個模塊的基礎(chǔ)模塊酗洒。logback-classic是log4j的一個 改良版本士修。此外logback-classic完整實現(xiàn)SLF4J API使你可以很方便地更換成其它日志系統(tǒng)如log4j或JDK14 Logging。logback-access訪問模塊與Servlet容器集成提供通過Http來訪問日志的功能
使用方法如下:
先引入依賴
<!--這個依賴直接包含了 logback-core 以及 slf4j-api的依賴-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Logger log = LoggerFactory.getLogger(JLog.class);
log.info("info");
log.debug("debug");
log.error(" error ");
SLF4J
SLF4J樱衷,即簡單日志門面(Simple Logging Facade for Java)棋嘲,不是具體的日志解決方案,它只服務(wù)于各種各樣的日志系統(tǒng),他主要解決的問題場景如下矩桂,假如系統(tǒng)今天采用了A日志框架沸移,過了2天由于特殊原因,需要切換到B日志框架侄榴,那如果沒有這個門面雹锣,則需要更改所有的日志代碼,而有了這個門面癞蚕,項目中直接使用門面來輸入日志蕊爵,則切換時沒有影響,不需要改變?nèi)魏未a桦山,只需要引入新的依賴攒射,做一個配置即可醋旦。
常用的日志級別
- OFF 關(guān)閉:最高級別,不輸出日志会放。
- FATAL 致命:輸出非常嚴重的可能會導致應用程序終止的錯誤饲齐。
- ERROR 錯誤:輸出錯誤,但應用還能繼續(xù)運行咧最。
- WARN 警告:輸出可能潛在的危險狀況捂人。
- INFO 信息:輸出應用運行過程的詳細信息。
- DEBUG 調(diào)試:輸出更細致的對調(diào)試應用有用的信息窗市。
- TRACE 跟蹤:輸出更細致的程序運行軌跡先慷。
- ALL 所有:輸出所有級別信息