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