Struts Chapter 9 Log4j(系統運行時的狀態記錄日誌)

<!--
Struts Chapter 9 Log4j(系統運行時的狀態記錄日誌)
Goal:能夠給自己的做的系統寫一個系統運行的狀態日誌記錄,便於以後系統的維護!
當然,也是爲了學Hibernate打好基礎!然後呢~這個呢,也沒什麼好說的~我就直接把前輩
們總結好的東西直接就貼上來了~呵呵~又懶了一次!
-->

一,首先是向sir給我們的log4j.properties的標準版,然後我自己加了一點註釋,然後其中的各個參數將會在第二點中講到!
	然後就是不能忘了必需的包:commons-logging.jar&log4j.jar

	#等號後面是別名,要在記錄日誌的地方用
	log4j.rootLogger=ALL,CONSOLE,FILE,ROLLING_FILE,MAIL,A1,DATABASE
	
	################### 
	# Console Appender 在控制檯輸出的
	################### 
	log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 
	#log4j.appender.CONSOLE.Threshold=INFO
	log4j.appender.CONSOLE.Target=System.out 
	log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
	log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n 
	#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
	
	
	##################### 
	# File Appender 輸出到文件中
	##################### 
	log4j.appender.FILE=org.apache.log4j.FileAppender
	#log4j.appender.FILE.Threshold=ERROR
	log4j.appender.FILE.File=c\:\\a\\file.html
	log4j.appender.FILE.Append=false 
	log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout
	log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n 
	
	
	######################## 
	# Rolling File 回滾文件
	######################## 
	log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
	#log4j.appender.ROLLING_FILE.Threshold=DEBUG
	log4j.appender.ROLLING_FILE.File=c\:\\a\\rolling.log
	log4j.appender.ROLLING_FILE.Append=true 
	log4j.appender.ROLLING_FILE.MaxFileSize=5KB
	#備份文件個數
	log4j.appender.ROLLING_FILE.MaxBackupIndex=1
	log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout 
	log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
	
	########################
	# DailyRollingFile 每日產生一個日誌文件
	#######################  
	log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender 
	log4j.appender.A1.File=c:\\a\\SampleMessages.log4j
	log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
	log4j.appender.A1.layout=org.apache.log4j.HTMLLayout
	
	
	########################
	# SMTP Appender(發送到email-需要用戶名和密碼,還要有javamail.jar,dsn.jar,imap.jar,mailapi.jar,pop3.jar,smtp.jar包)  
	#######################  
	#log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
	### 錯誤級別  
	##log4j.appender.MAIL.Threshold=FATAL
	## 緩存文件大小,日誌達到10K時發送Email
	#log4j.appender.MAIL.BufferSize=10
	#[email protected]
	#log4j.appender.MAIL.SMTPHost=smtp.163.com
	#log4j.appender.MAIL.SMTPUsername=wisdom_xw
	#log4j.appender.MAIL.SMTPPassword=密碼
	### 郵件主題  
	#log4j.appender.MAIL.Subject=Messsage From LOG4J
	#[email protected]
	#注意:下面的layout=後面的值要是women寫的解決轉碼問題的類,eg:com.shu.util.MyPattern
	#log4j.appender.MAIL.layout=com.shu.util.MyPattern
	#log4j.appender.MAIL.layout.ConversionPattern=[ErrorMessage] %d - %c -%-4r [%t] %-5p %c %x - %m%n
	
	##郵件中,內容包含中文的處理方式
	#public class MyPatternLayout extends PatternLayout {  
	#		@Override
	#   public String getContentType() {
	#       return "text/html;CHARSET=utf8"; //設定字符集  #
	#   }  
	#}
	#當佈局是HTML時(該類位於com.shu.util.MyPattern)
	#public class MyPattern extends HTMLLayout{
	#	@Override
	#	public String getContentType() {
	#		return "text/html;CHARSET=utf-8"; //設定字符集  #
	#	}
	#}
	
	######################## 
	# JDBC Appender 放入到DBSM中(需要jdbc驅動)(注意,系統默認沒有處理單引號問題,暈~突然想不起這個是怎麼處理的了)
	####################### 
	log4j.appender.DATABASE=BPSJDBCAppender
	log4j.appender.DATABASE.Threshold=all
	log4j.appender.DATABASE.URL=jdbc:sqlserver://localhost:1433;databaseName=testdb
	log4j.appender.DATABASE.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
	log4j.appender.DATABASE.user=sa
	log4j.appender.DATABASE.password=123456
	log4j.appender.DATABASE.sql=INSERT INTO error_msg VALUES ('%d - %c -%-4r [%t] %-5p %c %x - %m%n')
	log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout

	#只記得要寫這個方法!
	#import org.apache.log4j.Category;
	#import org.apache.log4j.Priority;
	#import org.apache.log4j.spi.LoggingEvent;
	#public class BPSLoggingEvent extends LoggingEvent {
	#	public BPSLoggingEvent(String fqnOfCategoryClass, Category logger, Priority level, Object message, Throwable throwable) {
	#		super(fqnOfCategoryClass, logger, level, message, throwable);
	#		// TODO Auto-generated constructor stub
	#	}
	#	public String getThreadName() {
	#		// TODO Auto-generated method stub
	#		String thrdName=super.getThreadName();
	#		if(thrdName.indexOf("'")!=-1){
	#			thrdName=thrdName.replaceAll("'", "''");
	#		}
	#		return thrdName;
	#	}
	#	public String getRenderedMessage() {
	#		String msg=super.getRenderedMessage();
	#		if(msg.indexOf("'")!=-1){
	#			msg=msg.replaceAll("'", "''");
	#		}
	#		return msg;
	#	}
	#}
	#還有這個方法
	#import org.apache.log4j.Category;
	#import org.apache.log4j.Priority;
	#import org.apache.log4j.spi.LoggingEvent;
	#import org.apache.log4j.Category;
	#import org.apache.log4j.Priority;
	#import org.apache.log4j.jdbc.JDBCAppender;
	#import org.apache.log4j.spi.LoggingEvent;
	#
	#public class BPSJDBCAppender extends JDBCAppender {
	#	protected String getLogStatement(LoggingEvent event) {
	#		String fqnOfCategoryClass = event.fqnOfCategoryClass;	
	#		Category logger = Category.getRoot();	
	#		Priority level = event.level;	
	#		Object message = event.getMessage();	
	#		Throwable throwable = null;	
	#		BPSLoggingEvent bEvent = new BPSLoggingEvent(fqnOfCategoryClass,
	#				logger, level, message, throwable);		
	#		return super.getLogStatement(bEvent);
	#	}
	#}
二,log4j.properties中各個參數的講解

	//-----------------------大體上------------------------------
	#log4j.rootLogger=輸出級別(all<debug<info<error),輸出位置(動態參數)

	#設置輸出具體的位置
	#log4j.appender.別名=ConsoleAppender(控制檯)\FileAppender(文件中)
						#DailyRollingFileAppender(每日一個文件)\SMTPAppender(發送郵件)\BPSJDBCAppender(數據庫中)
	
	#設置輸出級別
	#log4j.appender.別名.Threshold=可選值(all<debug<info<error)
	
	#設置輸出文件的格式
	#log4j.appender.別名.layout=PatternLayout(普通文本格式)、HTMLLayout(HTML格式)
	
	#設置日誌的具體內容(使用特殊符號代替,詳細見書:p174)
	#log4j.appender.ABC.layout.ConversionPattern=%F %L %d等等
	//--------------------------------------------------------------
	
	
	輸出級別的種類
	ERROR、WARN、INFO、DEBUG
	ERROR 爲嚴重錯誤 主要是程序的錯誤
	WARN 爲一般警告,比如session丟失
	INFO 爲一般要顯示的信息,比如登錄登出
	DEBUG 爲程序的調試信息
	配置日誌信息輸出目的地
	log4j.appender.appenderName = fully.qualified.name.of.appender.class
	1.org.apache.log4j.ConsoleAppender(控制檯)
	2.org.apache.log4j.FileAppender(文件)
	3.org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)
	4.org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
	5.org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
	配置日誌信息的格式
	log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
	1.org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
	2.org.apache.log4j.PatternLayout(可以靈活地指定佈局模式),
	3.org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串),
	4.org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)
	控制檯選項
	Threshold=DEBUG:指定日誌消息的輸出最低層次。
	ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。
	Target=System.err:默認情況下是:System.out,指定輸出控制檯
	FileAppender 選項
	Threshold=DEBUF:指定日誌消息的輸出最低層次。
	ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。
	File=mylog.txt:指定消息輸出到mylog.txt文件。
	Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
	RollingFileAppender 選項
	Threshold=DEBUG:指定日誌消息的輸出最低層次。
	ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。
	File=mylog.txt:指定消息輸出到mylog.txt文件。
	Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
	MaxFileSize=100KB: 後綴可以是KB, MB 或者是 GB. 在日誌文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。
	MaxBackupIndex=2:指定可以產生的滾動文件的最大數。
	log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
	日誌信息格式中幾個符號所代表的含義:
	 -X號: X信息輸出時左對齊;
	 %p: 輸出日誌信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL,
	 %d: 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
	 %r: 輸出自應用啓動到輸出該log信息耗費的毫秒數
	 %c: 輸出日誌信息所屬的類目,通常就是所在類的全名
	 %t: 輸出產生該日誌事件的線程名
	 %l: 輸出日誌事件的發生位置,相當於%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main (TestLog4.java:10)
	 %x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。
	 %%: 輸出一個"%"字符
	 %F: 輸出日誌消息產生時所在的文件名稱
	 %L: 輸出代碼中的行號
	 %m: 輸出代碼中指定的消息,產生的日誌具體信息
	 %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字符,就從左邊較遠輸出的字符截掉
	 
三,使用java代碼記錄日誌
[代碼中使用] 
	public   class  TestLog4j   {
	   public   static   void  main(String[] args)   {
	      PropertyConfigurator.configure( " D:/Code/conf/log4j.properties " );
	      Logger logger  =  Logger.getLogger(TestLog4j. class );
	      logger.debug( " debug " );
	      logger.error( " error " );
	      ....
	  } 
	}
<!--
Author:Lovingshu's Forever
Date:2011-11-02 22:33
Remark:I've nothing to say~but there is someone leave my life and never back~
-->
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章