您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何進(jìn)行Log4j2的簡(jiǎn)單使用,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
日志是一個(gè)系統(tǒng)經(jīng)常用到的功能,我們可以在調(diào)試的時(shí)候依靠日志查看輸出,在程序運(yùn)行的時(shí)候通過(guò)查看日志判斷程序運(yùn)行狀態(tài)。在Java世界中,有一個(gè)非常著名的日志類庫(kù)——Log4j?,F(xiàn)在Log4j也有了新版本,就是Log4j2。新版本的好處我就不多說(shuō)了。讓讓我們來(lái)開(kāi)始使用吧。
要使用Log4j2,第一步就是先導(dǎo)入它的jar包。如果是普通項(xiàng)目的話,到log4j2官網(wǎng)下載jar包,然后將log4j-api-2.7.jar
和log4j-core-2.7.jar
添加到你項(xiàng)目的類路徑下。
如果使用Maven或者Gradle的話,到mvn倉(cāng)庫(kù)查詢查找這兩個(gè)包,然后添加到項(xiàng)目依賴中。這樣就完成了準(zhǔn)備工作。
然后打開(kāi)項(xiàng)目,添加以下兩句,創(chuàng)建一個(gè)Logger并調(diào)試一些信息。注意這里的Logger和LogManager兩個(gè)類的全名分別是org.apache.logging.log4j.LogManager
和org.apache.logging.log4j.Logger
。不要和Java自帶的java.util.logging
下的日志類搞混了。
Logger logger = LogManager.getLogger(); logger.debug("5555555");
然后運(yùn)行一下項(xiàng)目,就可以看到對(duì)應(yīng)的輸出了。
如果你照著前面的做了,就會(huì)發(fā)現(xiàn)其實(shí)什么輸出都沒(méi)有,只有這么一句話:ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
。這是說(shuō)因?yàn)闆](méi)找到配置文件,所以使用默認(rèn)的日志級(jí)別,向控制臺(tái)只輸出錯(cuò)誤信息。這就引出了一個(gè)日志級(jí)別的問(wèn)題。
日志分為幾個(gè)級(jí)別,按照從輕往重如此排列:trace、debug、info、warn、error、fatal。相應(yīng)的Logger類也有這么幾個(gè)對(duì)應(yīng)方法,用于輸出相應(yīng)的日志信息。如果我們定義了一個(gè)級(jí)別,那么低于這個(gè)級(jí)別的日志不會(huì)輸出。由于沒(méi)有配置文件,所以默認(rèn)情況下的日志級(jí)別是error,正如前面的輸出那樣。這樣一來(lái),低于error的日志就不會(huì)輸出。所以我們回到剛才,將debug方法改為error方法,再次運(yùn)行項(xiàng)目。這次出現(xiàn)了日志輸出。
22:21:58.600 [Test worker] ERROR yitian.bean.BeanTest - 5555555
前面已經(jīng)簡(jiǎn)單演示了Log4j2的用法。下面就來(lái)說(shuō)說(shuō)Log4j2的配置文件。Log4j2既可以使用配置文件配置,也可以使用編程方式用代碼來(lái)配置。這里簡(jiǎn)單說(shuō)說(shuō)配置文件方式。Log4j2支持多種配置文件,XML、JSON、YAML和perperties文件都支持,當(dāng)然最常用的還是XML文件。將配置文件放在類路徑下即可,如果使用Maven或者Gradle的話,就是在resources文件夾下。
前面如果沒(méi)有配置文件的話,Log4j2就會(huì)使用一個(gè)默認(rèn)配置,等效于下面的配置文件。
<?xml version="1.0" encoding="UTF-8"?><Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="error"> <AppenderRef ref="Console"/> </Root> </Loggers></Configuration>
配置文件有兩個(gè)主要的地方,第一個(gè)是Appender節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)下會(huì)有很多Appender,也就是我們?nèi)罩据敵龅哪康牡兀梢允强刂婆_(tái)也可以是某個(gè)文件,甚至是專用的遠(yuǎn)程日志服務(wù)器。默認(rèn)情況下只有一個(gè)控制臺(tái)。第二種重要的節(jié)點(diǎn)是Loggers節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)下可以有很多個(gè)Logger,每個(gè)Logger可以記錄不同的信息,Logger之間也可以共享某些配置。上面定義了一個(gè)Root Logger,如果沒(méi)有指定Logger 的名稱或者指定的Logger不存在,就會(huì)使用Root,而且Root Logger下的配置默認(rèn)會(huì)被其他Logger繼承,除非它們定義了自己的配置。
然后我們?cè)倩仡^看看Appenders節(jié)點(diǎn),其中有這么一段:<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
。這里定義的就是日志的輸出格式。下面來(lái)簡(jiǎn)單說(shuō)說(shuō)常用的輸出格式。
%d{HH:mm:ss.SSS} 輸出時(shí)間,精確度為毫秒。
%t 輸出當(dāng)前線程的名稱。
%-5level 輸出日志級(jí)別,-5表示左對(duì)齊并且固定占5個(gè)字符寬度,如果不足用空格補(bǔ)齊。
%logger 輸出Logger名稱,如果是Root的話就沒(méi)有名稱。
%msg 日志信息,也就是我們傳入的信息。
%n 換行。
%F 輸出所在的文件名。
%L 輸出行號(hào)。
%M 輸出所在方法名。
%l 輸出語(yǔ)句所在的位置信息,包括文件名、類名、方法名、行號(hào)。
說(shuō)了這么多,現(xiàn)在我們就可以開(kāi)始自定義配置文件了。首先我們來(lái)添加一個(gè)新的Logger,來(lái)記錄所有信息,這個(gè)Logger的名稱就叫做TRACE_ALL吧。這個(gè)Logger有兩個(gè)屬性,level指定記錄級(jí)別,additivity指定傳遞性。假如傳遞性指定為true,如果我們現(xiàn)在使用TRACE_ALL記錄一個(gè)debug級(jí)別的日志,由于debug級(jí)別也符合Root的記錄范圍,這樣這個(gè)日志就會(huì)記錄兩遍。最后,我們用<AppenderRef ref="Console"/>
指定使用上面的控制臺(tái)Appender。
現(xiàn)在配置文件應(yīng)該是這樣。
<?xml version="1.0" encoding="UTF-8"?><Configuration status="INFO"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="debug"> <AppenderRef ref="Console"/> </Root> <Logger name="TRACE_ALL" level="trace" additivity="false"> <AppenderRef ref="Console"/> </Logger> </Loggers></Configuration>
程序代碼是這樣的。在調(diào)用getLogger的時(shí)候指定要使用哪一個(gè)Logger。
Logger logger = LogManager.getLogger("TRACE_ALL"); logger.info("5555555");
除了使用Console作為日志輸出目的地之外,我們還可以定義其他的輸出,比如文件。下面我們來(lái)新建一個(gè)文件Appender。在Appenders節(jié)點(diǎn)下新建一個(gè)File節(jié)點(diǎn),name和fileName屬性分別指定Appender名稱和目的文件名。然后我們指定TRACE_ALL Logger同時(shí)將日志輸出到控制臺(tái)和文件。
<?xml version="1.0" encoding="UTF-8"?><Configuration status="INFO"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> <File name="File" fileName="D:\Desktop\mylog.txt"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </File> </Appenders> <Loggers> <Root level="debug"> <AppenderRef ref="Console"/> </Root> <Logger name="TRACE_ALL" level="trace" additivity="true"> <AppenderRef ref="File"/> <AppenderRef ref="Console"/> </Logger> </Loggers></Configuration>
再次運(yùn)行程序,我們就會(huì)發(fā)現(xiàn)這次在對(duì)應(yīng)的路徑下多出一個(gè)文件,這個(gè)文件的內(nèi)容就是我們的輸出。
上述內(nèi)容就是如何進(jìn)行Log4j2的簡(jiǎn)單使用,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。