一直知道log4j是用來記錄日志的,但一直沒去看log4j到底是怎么用的,這兩天看了幾個log4j.properties配置語句詳解的帖子,在這里簡陋地記錄一下。
在完全不知道log4j怎么用的時候,我想先知道log4j使用時的效果以及具體需要哪些步驟來實現效果。
log4j可以將日志以文件的形式輸出,也可以輸出打印在控制台上,同時可以設置輸出的日志內容顯示格式、日志文件的生成方式(追加、覆蓋、設置日志文件大小等等)。
看過幾個詳細介紹的帖子以及自己動手試了一下,最終的log4j日志在Console上的顯示效果和tomcat日志差別不大,效果如下:

log4j的使用步驟:
1.添加log4j的jar包(maven項目就直接添加jar包依賴)
2.在src目錄下(maven項目放在resource目錄下)創建log4j.properties文件並進行配置(這里是配置成在控制台打印輸出)
3.在java代碼中寫入日志內容,當執行到該代碼時則會在控制台中顯示日志內容(若是配置為生成日志文件則會生成日志文件)
在log4j中最重要的一步就是在log4j.properties中的配置,先給出log4j.properties的配置格式為:
#配置根Logger
log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , … #以下代碼為appenderName*的基本格式配置 ------------------------------------------------------------------------------------------------------------ #配置日志信息輸出目的地Appender log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 … log4j.appender.appenderName.optionN = valueN #配置日志信息的格式布局(layout) log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 … log4j.appender.appenderName.layout.optionN = valueN ------------------------------------------------------------------------------------------------------------
以基本的輸出日志到控制台的配置示例作上方配置格式的對比:
### 全局日志等級配置,輸出位置配置### log4j.rootLogger=debug,stdout ### 輸出信息到控制台 ###
# 配置日志信息輸出目的地Appender log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out
# 配置日志信息的格式布局(layout) log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
每個appenderName可任意命名,但都要有對應的日志輸出目的地和日志信息格式分布的配置,以上只是最簡單的log4j.properties配置,實際使用可以根據自己的需要進行增加設置。
下面對日志配置的各個部分的設置項進行介紹:
全局日志等級配置,輸出標准設置:
log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …
日志等級分為以下幾級:
- off 最高等級,用於關閉所有日志記錄。
- fatal 指出每個嚴重的錯誤事件將會導致應用程序的退出。
- error 指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。
- warm 表明會出現潛在的錯誤情形。
- info 一般和在粗粒度級別上,強調應用程序的運行全程。
- debug 一般用於細粒度級別上,對調試應用程序非常有幫助。
- all 最低等級,用於打開所有日志記錄。
常用的只有debug、info、warm、error四個等級;
每個appenderName都要有相對應的設置包括Appender和Layout的配置:
log4j提供的Appender有以下幾種:
- org.apache.log4j.ConsoleAppender(控制台),
- org.apache.log4j.FileAppender(文件),
- org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件),
- org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
- org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方)
log4j提供的布局格式Layout有以下幾種:
- org.apache.log4j.HTMLLayout(以HTML表格形式布局),
- org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
- org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
- org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)
Log4J采用類似C語言中的printf函數的打印格式格式化日志信息,如下:
- %m 輸出代碼中指定的消息
- %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
- %r 輸出自應用啟動到輸出該log信息耗費的毫秒數
- %c 輸出所屬的類目,通常就是所在類的全名
- %t 輸出產生該日志事件的線程名
- %n 輸出一個回車換行符,Windows平台為“/r/n”,Unix平台為“/n”
- %d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},輸出類似:2002年10月18日 22 : 10 : 28 , 921
- %l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java: 10 )
- 所以可以根據自己的需求配置自由搭配的輸出格式,如:%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
下面是一個log4j.properties配置同時生成debug級別、error級別日志文件和打印到控制台示例:
### 全局日志等級配置,輸出標准設置 ### log4j.rootLogger=debug,stdout,DDD,EEE ### 輸出信息到控制台 ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### 輸出DEBUG 級別以上的日志到=/Users/tinybye/Documents/log4j/debug.log ### log4j.appender.DDD=org.apache.log4j.DailyRollingFileAppender log4j.appender.DDD.File=/Users/tinybye/Documents/log4j/debug.log log4j.appender.DDD.Append=true log4j.appender.DDD.Threshold=DEBUG log4j.appender.DDD.layout=org.apache.log4j.PatternLayout log4j.appender.DDD.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### 輸出ERROR 級別以上的日志到=/Users/tinybye/Documents/log4j/error.log ### log4j.appender.EEE=org.apache.log4j.DailyRollingFileAppender log4j.appender.EEE.File=/Users/tinybye/Documents/log4j/error.log log4j.appender.EEE.Append=true log4j.appender.EEE.Threshold=ERROR log4j.appender.EEE.layout=org.apache.log4j.PatternLayout log4j.appender.EEE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
配置語句作用詳解:
#全局日志等級配置,輸出位置 #log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , … log4j.rootLogger=error, stdout,logfile #stdout控制器(標准輸出) log4j.appender.stdout=org.apache.log4j.ConsoleAppender #設置Appender log4j.appender.stdout.Target=System.out #設置輸出目標 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout #設置布局 log4j.appender.stdout.layout.ConversionPattern=%d %p [%c]:%L - %m%n #設置輸出格式 #輸出日志文件 log4j.appender.logfile=org.apache.log4j.RollingFileAppender #設置Appender log4j.appender.logfile.File=pss.log #默認輸出到tomcat的根路徑或者運行測試工程的根路徑 log4j.appender.logfile.MaxFileSize=512KB #設置日志文件的最大內存大小 # Keep three backup files. log4j.appender.logfile.MaxBackupIndex=3 #設置日志文件的最大數量,當日志文件達到最大指定內存時則另外再生成一個文件存放日志 log4j.appender.logfile.Append = true #ture則將日志信息增加到指定文件中,false則將日志信息覆蓋指定文件內容,默認是true log4j.appender.logfile.Threshold = ERROR #設置只輸出ERROR級別以上的日志 # Pattern to output: date priority [category] - message log4j.appender.logfile.layout=org.apache.log4j.PatternLayout #設置布局 log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n #設置輸出格式
最后再附上上方日志簡單效果圖的java代碼:
1 public class Test { 2 public static void main(String[] args) { 3 Logger log = Logger.getLogger(Test.class); 4 log.info("這是一條信息"); 5 log.error("這是一條錯誤信息"); 6 } 7 }
以上就是本人對log4j的使用進行記錄的所有內容,如有錯的地方,歡迎批評指正。
