Log4j2 簡單使用

日誌是一個系統經常用到的功能,我們可以在調試的時候依靠日誌查看輸出,在程序運行的時候通過查看日誌判斷程序運行狀態。在Java世界中,有一個非常著名的日誌類庫——Log4j。現在Log4j也有了新版本,就是Log4j2。新版本的好處我就不多說了。讓讓我們來開始使用吧。

引入Log4j2

要使用Log4j2,第一步就是先導入它的jar包。如果是普通項目的話,到log4j2官網下載jar包,然後將log4j-api-2.7.jar和log4j-core-2.7.jar添加到你項目的類路徑下。

如果使用Maven或者Gradle的話,到mvn倉庫查詢查找這兩個包,然後添加到項目依賴中。這樣就完成了準備工作。

然後打開項目,添加以下兩句,創建一個Logger並調試一些信息。注意這裡的Logger和LogManager兩個類的全名分別是
org.apache.logging.log4j.LogManager和
org.apache.logging.log4j.Logger。不要和Java自帶的java.util.logging下的日誌類搞混了。

Logger logger = LogManager.getLogger();

logger.debug("5555555");

1

2

然後運行一下項目,就可以看到對應的輸出了。

日誌級別

如果你照著前面的做了,就會發現其實什麼輸出都沒有,只有這麼一句話:ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.。這是說因為沒找到配置文件,所以使用默認的日誌級別,向控制檯只輸出錯誤信息。這就引出了一個日誌級別的問題。

日誌分為幾個級別,按照從輕往重如此排列:trace、debug、info、warn、error、fatal。相應的Logger類也有這麼幾個對應方法,用於輸出相應的日誌信息。如果我們定義了一個級別,那麼低於這個級別的日誌不會輸出。由於沒有配置文件,所以默認情況下的日誌級別是error,正如前面的輸出那樣。這樣一來,低於error的日誌就不會輸出。所以我們回到剛才,將debug方法改為error方法,再次運行項目。這次出現了日誌輸出。

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

1

配置文件

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

前面如果沒有配置文件的話,Log4j2就會使用一個默認配置,等效於下面的配置文件。

1

2

3

4

5

6

7

8

9

10

11

12

13

配置文件有兩個主要的地方,第一個是Appender節點,這個節點下會有很多Appender,也就是我們日誌輸出的目的地,可以是控制檯也可以是某個文件,甚至是專用的遠程日誌服務器。默認情況下只有一個控制檯。第二種重要的節點是Loggers節點,這個節點下可以有很多個Logger,每個Logger可以記錄不同的信息,Logger之間也可以共享某些配置。上面定義了一個Root Logger,如果沒有指定Logger 的名稱或者指定的Logger不存在,就會使用Root,而且Root Logger下的配置默認會被其他Logger繼承,除非它們定義了自己的配置。

然後我們再回頭看看Appenders節點,其中有這麼一段:。這裡定義的就是日誌的輸出格式。下面來簡單說說常用的輸出格式。

%d{HH:mm:ss.SSS} 輸出時間,精確度為毫秒。

%t 輸出當前線程的名稱。

%-5level 輸出日誌級別,-5表示左對齊並且固定佔5個字符寬度,如果不足用空格補齊。

%logger 輸出Logger名稱,如果是Root的話就沒有名稱。

%msg 日誌信息,也就是我們傳入的信息。

%n 換行。

%F 輸出所在的文件名。

%L 輸出行號。

%M 輸出所在方法名。

%l 輸出語句所在的位置信息,包括文件名、類名、方法名、行號。

自定義配置

自定義Logger

說了這麼多,現在我們就可以開始自定義配置文件了。首先我們來添加一個新的Logger,來記錄所有信息,這個Logger的名稱就叫做TRACE_ALL吧。這個Logger有兩個屬性,level指定記錄級別,additivity指定傳遞性。假如傳遞性指定為true,如果我們現在使用TRACE_ALL記錄一個debug級別的日誌,由於debug級別也符合Root的記錄範圍,這樣這個日誌就會記錄兩遍。最後,我們用指定使用上面的控制檯Appender。

現在配置文件應該是這樣。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

程序代碼是這樣的。在調用getLogger的時候指定要使用哪一個Logger。

Logger logger = LogManager.getLogger("TRACE_ALL");

logger.info("5555555");

1

2

自定義Appender

除了使用Console作為日誌輸出目的地之外,我們還可以定義其他的輸出,比如文件。下面我們來新建一個文件Appender。在Appenders節點下新建一個File節點,name和fileName屬性分別指定Appender名稱和目的文件名。然後我們指定TRACE_ALL Logger同時將日誌輸出到控制檯和文件。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

再次運行程序,我們就會發現這次在對應的路徑下多出一個文件,這個文件的內容就是我們的輸出。

到此為止,大家應該可以基本使用Log4j2了。如果有更加複雜的需求,就需要自己去查閱相關資料了。

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

---------------------

原文:
https://blog.csdn.net/u011054333/article/details/54389311


分享到:


相關文章: