log4j是什么
* Apache的開源項(xiàng)目log4j是一個(gè)功能強(qiáng)大的日志組件(框架),提供方便的日志記錄滋将。
日志的作用
- 第一用途:編寫程序的時(shí)候邻悬,進(jìn)行調(diào)試。
- 類似于:大家使用System.out.print()來調(diào)試代碼
- 第二用途:項(xiàng)目上線(商業(yè)運(yùn)行)随闽,查看系統(tǒng)的運(yùn)行狀態(tài)
- 日志是用來記錄信息的父丰,比如服務(wù)器的日志主要是用來記錄一些訪問信息,以便出現(xiàn)狀況時(shí)掘宪,可以根據(jù)日志來判斷原因蛾扇。
聊聊System.out.print()的缺陷
- 過于簡單,只能輸出在控制臺(tái)
- 不能寫入文件系統(tǒng)
- 日志不能分級(jí)別魏滚,沒有開關(guān)
log4j的使用
使用1:我們自己用
- 導(dǎo)入jar包
- 編寫log4j的配置文件
- 自己代碼中的實(shí)際使用
示例代碼:
import org.apache.log4j.Logger;
import org.junit.Test;
public class Junit4Test {
static Logger logger = Logger.getLogger(Junit4Test.class);
@Test
public void test(){
logger.error("junit4的log4j...");
}
}
使用2:導(dǎo)入的框架使用
解讀log4j.properties配置文件
### 輸出源1:名字叫stdout, 其輸出到控制臺(tái) ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### 輸出源2:名字叫file,其輸出到文件 ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=d:\\mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### 根記錄器(控制器):級(jí)別是:info, 開啟輸出源:stdout ###
log4j.rootLogger=info, stdout
rootLogger(記錄器镀首,控制器)
配置根rootLogger,其語法為:log4j.rootLogger = [ level ] , appenderName, appenderName, …
-
level:是日志記錄的優(yōu)先級(jí)鼠次,分為(高)OFF更哄、FATAL、ERROR腥寇、WARN成翩、INFO、DEBUG赦役、ALL(低)或者自定義的級(jí)別麻敌。
- Log4j建議只使用四個(gè)級(jí)別,優(yōu) 先級(jí)從高到低分別是ERROR掂摔、WARN术羔、INFO赢赊、DEBUG。通過在這里定義的級(jí)別级历,您可以控制到應(yīng)用程序中相應(yīng)級(jí)別的日志信息的開關(guān)释移。
- 定義了ERROR級(jí)別:FATAL,ERROR級(jí)別日志可以輸出,WARM, INFO, DEBUG級(jí)別日志鱼喉,不輸出秀鞭。
- 定義成debug:
- appenderName就是指B日志信息輸出到哪個(gè)地方趋观。您可以同時(shí)指定多個(gè)輸出目的地扛禽。
Appender(輸出源)
-
配置日志信息輸出目的地Appender,其語法為:
log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 … log4j.appender.appenderName.option = valueN
-
log4j提供的appender有以下幾種:
org.apache.log4j.ConsoleAppender(控制臺(tái))皱坛, org.apache.log4j.FileAppender(文件)编曼, org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個(gè)日志文件), org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸的時(shí)候產(chǎn)生一個(gè)新的文件)剩辟, org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)
-
配置日志信息的格式(布局)掐场,其語法為:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 … log4j.appender.appenderName.layout.option = valueN
-
其中,Log4j提供的layout有以下幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)贩猎, org.apache.log4j.PatternLayout(可以靈活地指定布局模式)熊户, org.apache.log4j.SimpleLayout(包含日志信息的級(jí)別和信息字符串), org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間吭服、線程嚷堡、類別等等信息)
-
Log4J采用類似C語言中的printf函數(shù)的打印格式格式化日志信息,打印參數(shù)如下:
%m 輸出代碼中指定的消息 %p 輸出優(yōu)先級(jí)艇棕,即DEBUG蝌戒,INFO,WARN沼琉,ERROR北苟,F(xiàn)ATAL %r 輸出自應(yīng)用啟動(dòng)到輸出該log信息耗費(fèi)的毫秒數(shù) %c 輸出所屬的類目,通常就是所在類的全名 %t 輸出產(chǎn)生該日志事件的線程名 %n 輸出一個(gè)回車換行符打瘪,Windows平臺(tái)為“rn”友鼻,Unix平臺(tái)為“n” %d 輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601闺骚,也可以在其后指定格式彩扔,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28葛碧,921 %l 輸出日志事件的發(fā)生位置借杰,包括類目名、發(fā)生的線程进泼,以及在代碼中的行數(shù)蔗衡。舉例:Testlog4.main(TestLog4.java:10)
slf4j簡介
- 定義了一個(gè)接口
- 需要一個(gè)真正做事的纤虽,可以是log4j,或者其他绞惦。
log4j日志的缺陷
- 缺陷:如果你使用別人的框架逼纸,你不會(huì)喜歡別人指定的具體日志組件。
slf4j的介紹
- slf4j不同于其他日志類庫济蝉,與其它有很大的不同杰刽。slf4j(Simple logging Facade for Java)不是一個(gè)真正的日志實(shí)現(xiàn),而是一個(gè)抽象層( abstraction layer)王滤,它允許你在后臺(tái)使用任意一個(gè)日志類庫贺嫂。
- 體會(huì)一句話:如果你使用別人的框架,你不喜歡別人了指定的具體日志組件(框架)雁乡。
slf4j所提供的核心API是一些接口以及一個(gè)LoggerFactory的工廠類第喳。
slf4j提供了統(tǒng)一的記錄日志的接口,只要按照其提供的方法記錄即可踱稍。不需要在代碼中或配置文件中指定你打算使用那個(gè)具體的日志系統(tǒng)曲饱。
最終日志的格式、記錄級(jí)別珠月、輸出方式等通過具體日志系統(tǒng)的配置來實(shí)現(xiàn)扩淀,可以靈活切換日志系統(tǒng)。
slf4j使用舉例
- 導(dǎo)入slf4j的jar
- slf4j-api-1.6.1.jar
-
編寫代碼
import org.slf4j.Logger; import org.slf4j.LoggerFactory; publicclass HelloSlf4j { static Logger logger = LoggerFactory.getLogger(HelloSlf4j.class); publicstaticvoid main(String[] args) { logger.debug("This is debug message"); logger.info("This is info message"); logger.warn("This is warn message"); logger.error("This is error message"); } }
真正使用
第一步:導(dǎo)入jar
- 使用slf4j進(jìn)行日志輸出時(shí)啤挎,slf4j-api-1.6.1.jar這個(gè)jar包驻谆,是不夠的。因?yàn)榍纸@里面只有一個(gè)抽象層旺韭,沒有真正的日志實(shí)現(xiàn)。
- 例如:底層采用log4j這個(gè)真正做事的日志框架掏觉,還需要導(dǎo)入:
- log4j-1.2.16.jar(log4j自身的jar包)
- slf4j-log4j12-1.7.2.jar(log4j與slf4j的適配層)
第二步:編寫配置文件
- 直接使用log4j的配置文件即可