1. 程式人生 > >Log4j筆記----01

Log4j筆記----01

毫秒 診斷 ets 一個 不存在 末尾 otl 所在 images

新建普通java project

技術分享

項目創建文件如上

log4j.properties中編輯屬性

 ### 設置###
log4j.rootLogger = debug,stdout,D,E

### 輸出信息到控制臺 ###
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 級別以上的日誌到=E://logs/log.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

(後面分析屬性代表的意義)

(E:/logs/log.log如果不存在會自動創建)

編寫Test.java

import org.apache.log4j.Logger;
/**
 * @author ZZZ
 * @date 2017年5月5日上午10:39:50
 */

public class Test {
	private static Logger logger = Logger.getLogger(Test.class);
	
	public static void main(String[] args){
		//System.out.println("this is println message .");
		
		//record message of level debug
		logger.debug("This is a debug message");
		
		//record message of level info
		logger.info("This is a info message");
		
		//record message of level error
		logger.error("this is a error message");
		
	}
}

運行Test.java , 控制臺輸出如下

技術分享

找到E:/logs/log.log 打開,如下

技術分享


log4j.properties屬性分析

 ### 設置###
log4j.rootLogger = debug ,stdout,D

log4j.rootLogger = [ level ] , appenderName1, appenderName2, …

level 是日誌最低等級(大於等於這個等級日誌會輸出)

日誌等級:ERROR > WARN > INFO > DEBUG

appdenderName 在properties後面配置會使用,如下

技術分享

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender

設置stdout 和 D 的 log 類型

技術分享

log4j.appender.D.File = E://logs/log.log

指定D的位置

log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

log4j.appender.D.layout = org.apache.log4j.PatternLayout

設置log輸出格式

技術分享

example:把D 換成HTMLLayout,打開log.log如下

技術分享

log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

針對PatternLayout的設置,設置參數如下:

1)-X號: X信息輸出時左對齊。
2)%p: 輸出日誌信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL。
3)%d: 輸出日誌時間點的日期或時間,默認格式為ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921。
4)%r: 輸出自應用啟動到輸出該log信息耗費的毫秒數。
5)%c: 輸出日誌信息所屬的類目,通常就是所在類的全名。
6)%t: 輸出產生該日誌事件的線程名。
7)%l: 輸出日誌事件的發生位置,相當於%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)。
8)%x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。
9)%%: 輸出一個"%"字符。
10)%F: 輸出日誌消息產生時所在的文件名稱。
11) %L: 輸出代碼中的行號。
12)%m: 輸出代碼中指定的消息,產生的日誌具體信息。
13)%n: 輸出一個回車換行符,Windows平臺為"\r\n",Unix平臺為"\n"輸出日誌信息換行。
可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:
1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,默認的情況下右對齊。
2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,"-"號指定左對齊。
3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大於30的話,就會將左邊多出的字符截掉,但小於30的話也不會有空格。
4)%20.30c:如果category的名稱小於20就補空格,並且右對齊,如果其名稱長於30字符,就從左邊交遠銷出的字符截掉。

log4j.appender.D.Append = true

如果設置為true,信息會以追加到文件末尾的形式,如果為false則會覆蓋掉

log4j.appender.D.Threshold = DEBUG 

appender D 輸出 大於等於 DEBUG level 的log信息。


Log4j筆記----01