Log4j2 簡單使用

日志是一個(gè)系統(tǒng)經(jīng)常用到的功能,我們可以在調(diào)試的時(shí)候依靠日志查看輸出,在程序運(yùn)行的時(shí)候通過查看日志判斷程序運(yùn)行狀態(tài)。在Java世界中,有一個(gè)非常著名的日志類庫——Log4j?,F(xiàn)在Log4j也有了新版本,就是Log4j2。新版本的好處我就不多說了。讓讓我們來開始使用吧。

引入Log4j2

要使用Log4j2,第一步就是先導(dǎo)入它的jar包。如果是普通項(xiàng)目的話,到log4j2官網(wǎng)下載jar包,然后將log4j-api-2.7.jarlog4j-core-2.7.jar添加到你項(xiàng)目的類路徑下。

如果使用Maven或者Gradle的話,到mvn倉庫查詢查找這兩個(gè)包,然后添加到項(xiàng)目依賴中。這樣就完成了準(zhǔn)備工作。

然后打開項(xiàng)目,添加以下兩句,創(chuàng)建一個(gè)Logger并調(diào)試一些信息。注意這里的Logger和LogManager兩個(gè)類的全名分別是org.apache.logging.log4j.LogManagerorg.apache.logging.log4j.Logger。不要和Java自帶的java.util.logging下的日志類搞混了。

Logger logger = LogManager.getLogger();
logger.debug("5555555");

然后運(yùn)行一下項(xiàng)目,就可以看到對(duì)應(yīng)的輸出了。

日志級(jí)別

如果你照著前面的做了,就會(huì)發(fā)現(xiàn)其實(shí)什么輸出都沒有,只有這么一句話:ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.。這是說因?yàn)闆]找到配置文件,所以使用默認(rèn)的日志級(jí)別,向控制臺(tái)只輸出錯(cuò)誤信息。這就引出了一個(gè)日志級(jí)別的問題。

日志分為幾個(gè)級(jí)別,按照從輕往重如此排列:trace、debug、info、warn、error、fatal。相應(yīng)的Logger類也有這么幾個(gè)對(duì)應(yīng)方法,用于輸出相應(yīng)的日志信息。如果我們定義了一個(gè)級(jí)別,那么低于這個(gè)級(jí)別的日志不會(huì)輸出。由于沒有配置文件,所以默認(rèn)情況下的日志級(jí)別是error,正如前面的輸出那樣。這樣一來,低于error的日志就不會(huì)輸出。所以我們回到剛才,將debug方法改為error方法,再次運(yùn)行項(xiàng)目。這次出現(xiàn)了日志輸出。

22:21:58.600 [Test worker] ERROR yitian.bean.BeanTest - 5555555

配置文件

前面已經(jīng)簡單演示了Log4j2的用法。下面就來說說Log4j2的配置文件。Log4j2既可以使用配置文件配置,也可以使用編程方式用代碼來配置。這里簡單說說配置文件方式。Log4j2支持多種配置文件,XML、JSON、YAML和perperties文件都支持,當(dāng)然最常用的還是XML文件。將配置文件放在類路徑下即可,如果使用Maven或者Gradle的話,就是在resources文件夾下。

前面如果沒有配置文件的話,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,如果沒有指定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"/>。這里定義的就是日志的輸出格式。下面來簡單說說常用的輸出格式。

  • %d{HH:mm:ss.SSS} 輸出時(shí)間,精確度為毫秒。
  • %t 輸出當(dāng)前線程的名稱。
  • %-5level 輸出日志級(jí)別,-5表示左對(duì)齊并且固定占5個(gè)字符寬度,如果不足用空格補(bǔ)齊。
  • %logger 輸出Logger名稱,如果是Root的話就沒有名稱。
  • %msg 日志信息,也就是我們傳入的信息。
  • %n 換行。
  • %F 輸出所在的文件名。
  • %L 輸出行號(hào)。
  • %M 輸出所在方法名。
  • %l 輸出語句所在的位置信息,包括文件名、類名、方法名、行號(hào)。

自定義配置

自定義Logger

說了這么多,現(xiàn)在我們就可以開始自定義配置文件了。首先我們來添加一個(gè)新的Logger,來記錄所有信息,這個(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");

自定義Appender

除了使用Console作為日志輸出目的地之外,我們還可以定義其他的輸出,比如文件。下面我們來新建一個(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)容就是我們的輸出。

到此為止,大家應(yīng)該可以基本使用Log4j2了。如果有更加復(fù)雜的需求,就需要自己去查閱相關(guān)資料了。

參考資料

http://blog.csdn.net/autfish/article/details/51203709

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在應(yīng)用程序中添加日志記錄總的來說基于三個(gè)目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 5,217評(píng)論 1 13
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個(gè)目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 5,159評(píng)論 0 6
  • 一、Log4j簡介 Log4j有三個(gè)主要的組件:Loggers(記錄器),Appenders (輸出源)和Layo...
    默默守護(hù)閱讀 1,979評(píng)論 2 8
  • from:https://www.cnblogs.com/ITtangtang/p/3926665.html一、L...
    enshunyan閱讀 3,412評(píng)論 0 0
  • log4j是一個(gè)被廣泛使用的Java日志記錄框架,通過使用該框架,我們可以在自己的項(xiàng)目中根據(jù)自身需求靈活配置日志輸...
    LilacZiyun閱讀 6,078評(píng)論 0 7

友情鏈接更多精彩內(nèi)容