1. 程式人生 > >JAVA中使用log4j及slf4j進行日誌輸出的方法

JAVA中使用log4j及slf4j進行日誌輸出的方法

cto 所在 inf 官方 pat etl 註意 actor 結果

  JAVA中輸出日誌比較常用的是log4j,這裏講下log4j的配置和使用方法,以及slf4j的使用。

一、下載log4j的架包,並導入項目中,如下:

技術分享

二、創建log4j.properties配置文件

1、log4j配置文件的位置:

(1)如果是java project項目,則在項目的根目錄下創建log4j.properties而不是在src目錄下。

(2)如果是java web項目,則在src目錄下創建log4j.properties配置文件,因為這個時候tomcat會去默認的加載這個配置文件,而不需要我們手動的加載log4j的配置文件。

log4j.properties配置內容如下:

1 log4j.rootLogger=info,logTest
2 log4j.appender.logTest=org.apache.log4j.DailyRollingFileAppender
3 log4j.appender.logTest.File=/logs/LogTest/logTest.log
4 log4j.appender.logTest.DatePattern=‘.‘yyyy-MM-dd‘.log‘
5 log4j.appender.logTest.layout=org.apache.log4j.PatternLayout
6 log4j.appender.logTest.layout.ConversionPattern=[LogTestInfo] [%d][%c][%-5p]%m%n

2、log4j配置項的說明:

(1)第一行中rootLogger配置的是整個項目的日誌輸出,也可以只針對某一個模塊進行日誌輸出,比如第一行配置成log4j.logger.com.logTest.project=info,logTest,則日誌只輸出項目路徑com/logTest/project下的。

info為日誌級別,可分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL。配置為info這樣只顯示INFO, WARN, ERROR的日誌信息。

logTest為日誌配置的名稱,對應的詳細配置在下面。

(2)第二行是指定日誌輸出的類型。

可選參數如下:

org.apache.log4j.ConsoleAppender(控制臺)

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(每隔一段時間產生一個日誌文件)

org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)

org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)

(3)第三行是指定日誌文件輸出的路徑及文件名。

1)如果輸出到指定位置:log4j.appender.logTest.File=D:\\logTest.log

2)如果輸出到當前tomcat工作目錄下:log4j.appender.logTest.File=${catalina.home}/logTest/logTest.log

(4)第四行是配合第二行設置,對日誌產生的時間間隔進行格式化設置,格式化後的文本會作為日誌文件的後綴。

以上面第四行的設置為例,即每天產生一個新的logTest.log日誌文件,並將前一天的日誌命名為logTest.log.2017-07-07.log。註意:DatePattern中不用處理的文字要放到單引號(‘)中,如上面的(.)和(.log)。

可選參數如下:

1)‘.‘yyyy-MM:每月

2)‘.‘yyyy-ww:每周

3)‘.‘yyyy-MM-dd:每天

4)‘.‘yyyy-MM-dd-a:每半天

5)‘.‘yyyy-MM-dd-HH:每小時

6)‘.‘yyyy-MM-dd-HH-mm:每分鐘

(5)第五行是指定日誌輸出的格式。

可選參數如下:

1)org.apache.log4j.HTMLLayout(以HTML表格形式布局)

2)org.apache.log4j.PatternLayout(可以靈活地指定布局模式)

3)org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串)

4)org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)

(6)第六行是配合第五行設置,對日誌輸出進行格式化設置。

以第六行設置為例,[LogTestInfo] [%d][%c][%-5p]%m%n 的輸出結果為:

技術分享

格式化參數說明如下:

%m 輸出代碼中指定的消息。

%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL。

%r 輸出自應用啟動到輸出該log信息耗費的毫秒數。

%c 輸出所屬的類目,通常就是所在類的全名。

%t 輸出產生該日誌事件的線程名。

%n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n”。

%d 輸出日誌時間點的日期或時間,默認格式為ISO8601,也可以在其後指定格式,比如:%d{yyyy MM dd HH:mm:ss,SSS}。

%l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。

%%: 輸出一個"%"字符。

%F: 輸出日誌消息產生時所在的文件名稱。

%L: 輸出代碼中的行號。

可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:

1)%20c:指定輸出類目的名稱,最小的寬度是20,如果類目的名稱小於20的話,默認的情況下右對齊。

2)%-20c:指定輸出類目的名稱,最小的寬度是20,如果類目的名稱小於20的話,"-"號指定左對齊。

3)%.30c:指定輸出類目的名稱,最大的寬度是30,如果類目的名稱大於30的話,就會將左邊多出的字符截掉,但小於30的話也不會有空格。

4)%20.30c:如果類目的名稱小於20就補空格,並且右對齊,如果其名稱長於30字符,就從左邊較遠輸出的字符截掉。

三、日誌輸出代碼例子

(1)在類中創建一個logger對象。

1 private Logger logger = Logger.getLogger(this.getClass());

(2)使用logger輸出日誌。

1 logger.info("TestInfo 1");

輸出效果:

技術分享

到這裏,log4j的配置及使用就講完了。下面順便講下slf4j的使用。

四、slf4j配合log4j的使用

  SLF4J:即簡單日誌門面(Simple Logging Facade for Java),不是具體的日誌解決方案,它只服務於各種各樣的日誌系統。按照官方的說法,SLF4J是一個用於日誌系統的簡單Facade,允許最終用戶在部署其應用時使用其所希望的日誌系統。

  在使用SLF4J的時候,不需要在代碼中或配置文件中指定你打算使用那個具體的日誌系統,SLF4J提供了統一的記錄日誌的接口,只要按照其提供的方法記錄即可,最終日誌的格式、記錄級別、輸出方式等通過具體日誌系統的配置來實現,因此可以在應用中靈活切換日誌系統。

(1)下載slf4j的架包,並導入項目中,如下:

技術分享

(2)直接使用上面第二點中log4j的配置即可,不用另外配置slf4j。

(3)在類中創建logger對象。

1 private Logger logger = LoggerFactory.getLogger(this.getClass());

這裏註意要使用slf4j架包中的Logger,而不是log4j架包中的Logger。

(3)使用logger輸出日誌。

1 logger.info("TestInfo 1");
2 logger.info("TestInfo {}","1");

slf4j有兩種輸出方式,除了像log4j那樣拼接字符串輸出外,還提供參數化的方式輸出,即上面第二行的方式,用一對大括號來表示參數位,後面的1即為參數值。

JAVA中使用log4j及slf4j進行日誌輸出的方法