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~
-->

你可能感兴趣的:(Struts Chapter 9 Log4j(系统运行时的状态记录日志))