Struts Chapter 9 Log4j(系统运行时的状态记录日志)

来源:互联网 发布:终极算法 epub 编辑:程序博客网 时间:2024/06/15 14:36
<!--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=INFOlog4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayoutlog4j.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=ERRORlog4j.appender.FILE.File=c\:\\a\\file.htmllog4j.appender.FILE.Append=false log4j.appender.FILE.layout=org.apache.log4j.HTMLLayoutlog4j.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=DEBUGlog4j.appender.ROLLING_FILE.File=c\:\\a\\rolling.loglog4j.appender.ROLLING_FILE.Append=true log4j.appender.ROLLING_FILE.MaxFileSize=5KB#备份文件个数log4j.appender.ROLLING_FILE.MaxBackupIndex=1log4j.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.log4jlog4j.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#log4j.appender.MAIL.From=wisdom_xw@163.com#log4j.appender.MAIL.SMTPHost=smtp.163.com#log4j.appender.MAIL.SMTPUsername=wisdom_xw#log4j.appender.MAIL.SMTPPassword=密码### 邮件主题  #log4j.appender.MAIL.Subject=Messsage From LOG4J#log4j.appender.MAIL.To=XXXXXX@qq.com#注意:下面的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=BPSJDBCAppenderlog4j.appender.DATABASE.Threshold=alllog4j.appender.DATABASE.URL=jdbc:sqlserver://localhost:1433;databaseName=testdblog4j.appender.DATABASE.driver=com.microsoft.sqlserver.jdbc.SQLServerDriverlog4j.appender.DATABASE.user=salog4j.appender.DATABASE.password=123456log4j.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、DEBUGERROR 为严重错误 主要是程序的错误WARN 为一般警告,比如session丢失INFO 为一般要显示的信息,比如登录登出DEBUG 为程序的调试信息配置日志信息输出目的地log4j.appender.appenderName = fully.qualified.name.of.appender.class1.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.class1.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 ForeverDate:2011-11-02 22:33Remark:I've nothing to say~but there is someone leave my life and never back~-->
原创粉丝点击