JAVA中使用log4j及slf4j進行日志輸出的方法詳解


  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即為參數值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM