做课题查新网站,办公室装修设计多少钱,做mv主题网站,android应用开发软件1 简介Log4j(log for java)是Apache的一个开源项目#xff0c;通过使用Log4j#xff0c;我们可以控制日志信息输送的目的地是控制台、文件、GUI组件#xff0c;甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等#xff1b;我们也可以控制每一条日志的输出格式通过使用Log4j我们可以控制日志信息输送的目的地是控制台、文件、GUI组件甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等我们也可以控制每一条日志的输出格式通过定义每一条日志信息的级别我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是这些可以通过一个配置文件来灵活地进行配置而不需要修改应用的代码。2 配置第一步加入log4j-1.2.8.jar(可以选择log4j的更高版本)到lib下。第二步在CLASSPATH下建立log4j.properties其内容如下所示log4j.rootCategoryINFO, stdout , Rlog4j.appender.stdoutorg.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layoutorg.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern[QC] %p [%t] %C.%M(%L) | %m%nlog4j.appender.Rorg.apache.log4j.DailyRollingFileAppenderlog4j.appender.R.FileD:\\Tomcat 5.5\\logs\\qc.loglog4j.appender.R.layoutorg.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern%d-[TS] %p %t %c - %m%nlog4j.logger.com.neusoftDEBUGlog4j.logger.com.opensymphony.oscacheERRORlog4j.logger.net.sf.navigatorERRORlog4j.logger.org.apache.commonsERRORlog4j.logger.org.apache.strutsWARNlog4j.logger.org.displaytagERRORlog4j.logger.org.springframeworkDEBUGlog4j.logger.com.ibatis.dbWARNlog4j.logger.org.apache.velocityFATALlog4j.logger.com.canoo.webtestWARNlog4j.logger.org.hibernate.ps.PreparedStatementCacheWARNlog4j.logger.org.hibernateDEBUGlog4j.logger.org.logicalcobwebsWARN第三步根据自己的要求相应的修改其中属性。第四步在要输出日志的类中加入相关语句定义属性static Logger logger Logger.getLogger(LogDemo.class); //LogDemo为相关的类在相应的方法中if (logger.isDebugEnabled()){logger.debug(“System …..”);}3 属性说明(1)log4j.rootCategoryINFO, stdout , R此句为将等级为INFO的日志信息输出到stdout和R这两个目的地stdout和R的定义在下面的代码可以任意起名。等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL如果配置OFF则不打出任何信息如果配置为INFO这样只显示INFO、WARN、ERROR的log信息而DEBUG信息不会被显示。(2)log4j.appender.stdoutorg.apache.log4j.ConsoleAppender此句为定义名为stdout的输出端是哪种类型可以是org.apache.log4j.ConsoleAppender(控制台)org.apache.log4j.FileAppender(文件)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)(3)log4j.appender.stdout.layoutorg.apache.log4j.PatternLayout此句为定义名为stdout的输出端的layout是哪种类型可以是org.apache.log4j.HTMLLayout(以HTML表格形式布局)org.apache.log4j.PatternLayout(可以灵活地指定布局模式)org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)(4)log4j.appender.stdout.layout.ConversionPattern [QC] %p [%t] %C.%M(%L) | %m%n如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern打印参数如下%m 输出代码中指定的消息%M 输出打印该条日志的方法名%p 输出优先级即DEBUGINFOWARNERRORFATAL%r 输出自应用启动到输出该log信息耗费的毫秒数%c 输出所属的类目通常就是所在类的全名%t 输出产生该日志事件的线程名%n 输出一个回车换行符Windows平台为”rn”Unix平台为”n”%d 输出日志时间点的日期或时间默认格式为ISO8601也可以在其后指定格式比如%d{yyyy-MM-dd HH:mm:ss,SSS}输出类似2002-10-18 22:10:28,921%l 输出日志事件的发生位置及在代码中的行数[QC]是log信息的开头可以为任意字符一般为项目简称。(5)log4j.appender.Rorg.apache.log4j.DailyRollingFileAppender此句与第3行一样。定义名为R的输出端的类型为每天产生一个日志文件。(6)log4j.appender.R.FileD:\Tomcat 5.5\logs\qc.log此句为定义名为R的输出端的文件名为D:\Tomcat 5.5\logs\qc.log可以自行修改。(7)log4j.appender.R.layoutorg.apache.log4j.PatternLayout与第4行相同。(8)log4j.appender.R.layout.ConversionPattern%d-[TS] %p %t %c - %m%n与第5行相同。(9)log4j.logger.com. neusoft DEBUG指定com.neusoft包下的所有类的等级为DEBUG。可以把com.neusoft改为自己项目所用的包名。(10)log4j.logger.com.opensymphony.oscacheERROR(11)log4j.logger.net.sf.navigatorERROR这两句是把这两个包下出现的错误的等级设为ERROR如果项目中没有配置EHCache则不需要这两句。(12)log4j.logger.org.apache.commonsERROR(13)log4j.logger.org.apache.strutsWARN这两句是struts的包。(14)log4j.logger.org.displaytagERROR这句是displaytag的包。(QC问题列表页面所用)(15)log4j.logger.org.springframeworkDEBUG此句为Spring的包。(16)log4j.logger.org.hibernate.ps.PreparedStatementCacheWARN(17)log4j.logger.org.hibernateDEBUG此两句是hibernate的包。以上这些包的设置可根据项目的实际情况而自行定制。4 属性详解4.1 定义配置文件Log4j支持两种配置文件格式一种是XML(标准通用标记语言下的一个应用)格式的文件一种是Java特性文件log4j.properties(键值)。下面将介绍使用log4j.properties文件作为配置文件的方法:① 配置根LoggerLogger 负责处理日志记录的大部分操作其语法为log4j.rootLogger [ level ] , appenderName, appenderName, …其中level 是日志记录的优先级分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4j建议只使用四个级别优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别只有等于及高于这个级别的才进行处理则应用程序中所有DEBUG级别的日志信息将不被打印出来。ALL:打印所有的日志OFF关闭所有的日志输出。 appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。② 配置日志信息输出目的地 AppenderAppender 负责控制日志记录操作的输出。其语法为log4j.appender.appenderName fully.qualified.name.of.appender.classlog4j.appender.appenderName.option1 value1…log4j.appender.appenderName.optionN valueN这里的appenderName为在①里定义的可任意起名。其中Log4j提供的appender有以下几种org.apache.log4j.ConsoleAppender(控制台)org.apache.log4j.FileAppender(文件)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)可通过log4j.appender.R.MaxFileSize100KB设置文件大小还可通过log4j.appender.R.MaxBackupIndex1设置为保存一个备份文件。org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)例如log4j.appender.stdoutorg.apache.log4j.ConsoleAppender定义一个名为stdout的输出目的地ConsoleAppender为控制台。③ 配置日志信息的格式(布局)LayoutLayout 负责格式化Appender的输出其语法为log4j.appender.appenderName.layout fully.qualified.name.of.layout.classlog4j.appender.appenderName.layout.option1 value1…log4j.appender.appenderName.layout.optionN valueN其中Log4j提供的layout有以下几种org.apache.log4j.HTMLLayout(以HTML表格形式布局)org.apache.log4j.PatternLayout(可以灵活地指定布局模式)org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)4.2 格式化日志Log4J采用类似C语言中的printf函数的打印格式格式化日志信息打印参数如下%m 输出代码中指定的消息%M 输出打印该条日志的方法名%p 输出优先级即DEBUGINFOWARNERRORFATAL%r 输出自应用启动到输出该log信息耗费的毫秒数%c 输出所属的类目通常就是所在类的全名%t 输出产生该日志事件的线程名%n 输出一个回车换行符Windows平台为”rn”Unix平台为”n”%d 输出日志时间点的日期或时间默认格式为ISO8601也可以在其后指定格式比如%d{yyyy-MM-dd HH:mm:ss,SSS}输出类似2002-10-18 22:10:28,921%l 输出日志事件的发生位置及在代码中的行数。在代码中我们在需要输出日志信息的类中做如下的三个工作(1)导入所有需的commons-logging类import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;(2)在自己的类中定义一个org.apache.commons.logging.Log类的私有静态类成员private final Log log LogFactory.getLog(getClass());LogFactory.getLog()方法的参数使用的是当前类的class。(3)使用org.apache.commons.logging.Log类的成员方法输出日志信息if (log.isDebugEnabled()){log.debug(20);}if (log.isInfoEnabled()){log.info(15);}if (log.isWarnEnabled()){log.warn(11);}if (log.isErrorEnabled()){log.error(20);}if (log.isFatalEnabled()){log.fatal(1314);}5 应用记录器任何一个记录器的使用都有两个步骤(1)在配置文件中定义相应的记录器记录器格式有两种分别为第一种定义根记录器的格式为log4j.rootLogger [ level ], appendName1, appendName2, …appendNameN第二种定义一个非根记录器的格式为log4j.logger.loggerName1 [ level ], appendName1,…appendNameN……log4j.logger.loggerNameM [ level ], appendName1, …appendNameN我们可以定义任意个非根记录器。(2)在代码中调用Logger类的取得记录器方法取得相应的记录器对象。要取得根记录器对象可通过Logger.getRootLogger()函数要取得非根记录器可通过Logger.getLogger()函数。参考文献