Log4j日誌框架
引入依賴
在maven遠程倉庫引入依賴
<dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies>
配置文件
在 src/main/resources 目錄下新建配置文件,命名為 log4j.properties
首先介紹一下layout日誌信息格式中的常用設置——PatternLayout
org.apache.log4j.PatternLayout(可以靈活地指定輸出的日誌信息格式),有個ConversionPattern屬性,靈活配置輸出屬性:
%m 輸出代碼中指定的消息;
%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},輸出類似:2002-10-18 22:10:28,921;
%l 輸出日誌事件的發生位置,及在代碼中的行數;
配置文件有多種設置方式,下面介紹幾種常用的:
輸出到控制臺和每日日誌
假如日誌數據量不是很大,我們可以用DailyRollingFileAppender 每天產生一個日誌,方便查看;
log4j.rootLogger=DEBUG, Console ,DailyRollingFile #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n #DailyRollingFile log4j.appender.DailyRollingFile = org.apache.log4j.DailyRollingFileAppender log4j.appender.DailyRollingFile.File = C://log3.log log4j.appender.DailyRollingFile.layout = org.apache.log4j.PatternLayout log4j.appender.DailyRollingFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
輸出到控制臺和固定尺寸的日誌文件
假如日誌數據量很大,我們一般用RollingFileAppender,固定尺寸的日誌,假如超過了就產生一個新的文件;
MaxFileSize 是日誌文件的最大尺寸;根據實際需求來定 10KB 100KB也行
MaxBackupIndex是日誌文件的個數,假如超過了,則覆蓋,主要考慮到的是硬盤的容量問題;根據實際需求來定 比如 100 500;
log4j.rootLogger=DEBUG, Console ,RollingFile
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
#RollingFile
log4j.appender.RollingFile = org.apache.log4j.RollingFileAppender
log4j.appender.RollingFile.File = C://log4.log
log4j.appender.RollingFile.MaxFileSize=100KB
log4j.appender.RollingFile.MaxBackupIndex=10
log4j.appender.RollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
輸出時報錯ERROR日誌單獨存到指定文件
有時候我們需要把一些報錯ERROR日誌單獨存到指定文件,這時候需要使用Threshold屬性;
Threshold屬性可以指定日誌level
Log4j根據日誌信息的重要程度,分OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
比如我們指定某個appender的Threshold為WARN,那這個appender輸出的日誌信息就是WARN級別以及WARN以上的級別;
假如我們指定的是ERROR,那這個就輸出ERROR或者FATAL日誌信息;
當然這裏有個提前rootLogger裏配置的level比如小於Threshold層級,否則無效,還是按照總的rootLogger裏的level來輸出,一般我們實際實用的話 rootLogger裏配置DEBUG,然後某個文件專門存儲ERROR日誌,就配置下Threshold為ERROR。
log4j.rootLogger=DEBUG, Console ,DFile ,EFILE
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
#DEBUGFile
log4j.appender.DFile = org.apache.log4j.FileAppender
log4j.appender.DFile.File = C://DEBUG.log
log4j.appender.DFile.layout = org.apache.log4j.PatternLayout
log4j.appender.DFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
log4j.appender.DFile.Threshold = DEBUG
log4j.appender.DFile.Append = true
#ERRORFile
log4j.appender.EFILE = org.apache.log4j.FileAppender
log4j.appender.EFILE.File = C://ERROR.log
log4j.appender.EFILE.layout = org.apache.log4j.PatternLayout
log4j.appender.EFILE.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
log4j.appender.EFILE.Threshold = ERROR
實例代碼
package cn.cslg.log; import org.apache.log4j.Logger; public class Test { private static Logger logger=Logger.getLogger(Test.class); // 獲取logger實例 public static void main(String[] args) { logger.info("普通Info信息"); logger.debug("調試debug信息"); logger.error("報錯error信息"); logger.warn("警告warn信息"); logger.fatal("嚴重錯誤fatal信息"); logger.error("報錯信息", new IllegalArgumentException("非法參數")); } }
Log4j日誌框架