commons-logging日志输出自定义异常
2013-12-04 15:43
302 查看
日志输出在任何一个项目中都是不可缺少的重要功能,它不但在项目开发阶段对于项目的调试有很大的帮助,在程序运行阶段由于忠实记录程序运行过程中的各种操作以及出现的各种错误信息,对于项目后期的运行维护也有重要作用。所以实现日志记录功能对于OA系统来讲也是一定要完成的任务。下面介绍在java项目开发中比较常用的日志记录实现方式,commons-logging实现输出日志文件。commons-log实现日志输出主要分为四个步骤,1.添加相关jar包;2.配置log4j.properties文件;3.自定义异常类;4.编写测试单元,下面让我们来分别看看这几部分是如何做的:
1.添加相关jar包。
commons-log实现输出日志文件用到的jar包主要有两个,分别是commons-logging-1.0.4.jar和log4j-1.2.11.jar。
2.配置log4j.properties文件
在上面的配置文件中我们看到有两种Appender分别是ConsoleAppender和FileAppender,由于日志信息支持多种输出方式,所以我们可以选择这两种方式中的任意一种,当然也可以同时选择这两种输出方式,注意在配置log4j.properties文件的时候需要注意三点:
第一是log4j.rootLogger这一项的表明日志的输出方式,如果使用控制台方式输出的话一定要添加stdout,如果使用文件输出日志信息一定要加上file,否则信息是不能输出到文件的。
第二点是配置日志输出的级别,日志信息被分为五个级别分别是DEBUG,INFO,WARN,ERROR,FATAL这五个,并且其级别依次升高。而所谓的配置日志输出级别的意思是指当日志输出级别确定以后日志只输出等于高于该级别的日志信息,比如当我们把输出日志信息的级别定位INFO的时候,由于INFO级别高于DEBUG级别,所以日志将不会输出DEBUG级别的信息,只会输出INFO,WARN,ERROR,FATAL级别的信息。
第三点配置日志输出作用的类的范围。这个配置项就是最下面那一行配置log4j.logger。这一项的具体配置会根据下面的实例(第四步)进行讲解。
3.自定义异常类。编写自己的异常类MyException.java,其代码如下:
4.编写测试单元。针对第二步中的配置日志信息输出范围的介绍,在我的java项目中src目录下新建两个包com.yang(其中包含LogTest类)和com.chang(其中包含LogTest2类),这两个测试类的代码如下:
仔细查看这两个类的代码我们发现只有一个地方是不一样的,在LogTest类中Log logger = (Log)LogFactory.getLog(LogTest.class)但是在LogTest2类中Log logger = (Log)LogFactory.getLog(LogTest2.class),另外不要忘了我们在log4j的配置文件中配置的日志输出范围是log4j.logger.com.yang,这样的话在执行LogTest2类的main函数时是不会输出文件的,因为LogTest2类所在的路径是com.chang并不在com.yang路径中,那么如果我们在不改动代码的情况下如何让LogTest2类也同样输出日志文件呢?其实很简单,只需要把log4j.properties文件中的最后一项log4j.logger.com.yang=debug改为log4j.logger.com=debug,其实就是扩大一下输出范围而已。这样整个日志输出功能我们就完成了。
1.添加相关jar包。
commons-log实现输出日志文件用到的jar包主要有两个,分别是commons-logging-1.0.4.jar和log4j-1.2.11.jar。
2.配置log4j.properties文件
### direct log messages to stdout ### 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=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### direct messages to file hibernate.log ### log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=f:/oa.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### set log levels - for more verbose logging change 'info' to 'debug' ### log4j.rootLogger=warn, stdout,file #log4j.logger.org.hibernate=info #log4j.logger.org.hibernate=debug ### log HQL query parser activity #log4j.logger.org.hibernate.hql.ast.AST=debug ### log just the SQL #log4j.logger.org.hibernate.SQL=debug ### log JDBC bind parameters ### log4j.logger.org.hibernate.type=info #log4j.logger.org.hibernate.type=debug ### log schema export/update ### log4j.logger.org.hibernate.tool.hbm2ddl=debug ### log HQL parse trees #log4j.logger.org.hibernate.hql=debug ### log cache activity ### #log4j.logger.org.hibernate.cache=debug ### log transaction activity #log4j.logger.org.hibernate.transaction=debug ### log JDBC resource acquisition #log4j.logger.org.hibernate.jdbc=debug ### enable the following line if you want to track down connection ### ### leakages when using DriverManagerConnectionProvider ### #log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace log4j.logger.com.yang =debug
在上面的配置文件中我们看到有两种Appender分别是ConsoleAppender和FileAppender,由于日志信息支持多种输出方式,所以我们可以选择这两种方式中的任意一种,当然也可以同时选择这两种输出方式,注意在配置log4j.properties文件的时候需要注意三点:
第一是log4j.rootLogger这一项的表明日志的输出方式,如果使用控制台方式输出的话一定要添加stdout,如果使用文件输出日志信息一定要加上file,否则信息是不能输出到文件的。
第二点是配置日志输出的级别,日志信息被分为五个级别分别是DEBUG,INFO,WARN,ERROR,FATAL这五个,并且其级别依次升高。而所谓的配置日志输出级别的意思是指当日志输出级别确定以后日志只输出等于高于该级别的日志信息,比如当我们把输出日志信息的级别定位INFO的时候,由于INFO级别高于DEBUG级别,所以日志将不会输出DEBUG级别的信息,只会输出INFO,WARN,ERROR,FATAL级别的信息。
第三点配置日志输出作用的类的范围。这个配置项就是最下面那一行配置log4j.logger。这一项的具体配置会根据下面的实例(第四步)进行讲解。
3.自定义异常类。编写自己的异常类MyException.java,其代码如下:
package com.exception; public class MyException extends Exception { @Override public String getMessage() { // TODO Auto-generated method stub return "类型转换错误"; } }
4.编写测试单元。针对第二步中的配置日志信息输出范围的介绍,在我的java项目中src目录下新建两个包com.yang(其中包含LogTest类)和com.chang(其中包含LogTest2类),这两个测试类的代码如下:
package com.yang; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.exception.MyException; public class LogTest { private static void logError(String username,String password) throws Exception{ if("admin".equals(username) && "admin".equals("admin")){ throw new MyException(); } } public static void main(String[] args){ try { logError("admin","aa"); } catch (Exception e) { Log logger = (Log)LogFactory.getLog(LogTest.class); logger.debug(e.getMessage()); } } }
package com.chang; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.exception.MyException; import com.yang.LogTest; public class LogTest2 { private static void logError(String username,String password) throws Exception{ if("admin".equals(username) && "admin".equals("admin")){ throw new MyException(); } } public static void main(String[] args){ try { logError("admin","aa"); } catch (Exception e) { Log logger = (Log)LogFactory.getLog(LogTest2.class); logger.debug(e.getMessage()); } } }
仔细查看这两个类的代码我们发现只有一个地方是不一样的,在LogTest类中Log logger = (Log)LogFactory.getLog(LogTest.class)但是在LogTest2类中Log logger = (Log)LogFactory.getLog(LogTest2.class),另外不要忘了我们在log4j的配置文件中配置的日志输出范围是log4j.logger.com.yang,这样的话在执行LogTest2类的main函数时是不会输出文件的,因为LogTest2类所在的路径是com.chang并不在com.yang路径中,那么如果我们在不改动代码的情况下如何让LogTest2类也同样输出日志文件呢?其实很简单,只需要把log4j.properties文件中的最后一项log4j.logger.com.yang=debug改为log4j.logger.com=debug,其实就是扩大一下输出范围而已。这样整个日志输出功能我们就完成了。
相关文章推荐
- 在Spring中配置使用commons-logging的simplelog来输出日志
- 在Spring中配置使用commons-logging的simplelog来输出日志
- commons-logging如何调整日志输出级别
- 两步实现Log4j记录java控制台输出的系统所有异常信息和自定义记录日志---->非常实用,强烈推荐阅读
- Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志
- Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志
- 系统日志处理系列 (一)如何使用logging、commons-logging、log4j输出日志
- Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志
- 自定义未捕获异常时输出的日志为空或日志文件没有生成
- 系统日志处理系列 (一)如何使用logging、commons-logging、log4j输出日志
- Jakarta Commons Logging(JCL)之应用篇­­——与Log4j/JDK5 log实现日志输出
- java自定义异常信息日志输出
- commons-logging和Log4j日志管理
- commons-logging日志工具[续。。。。。。]
- struts异常不捕获也可以在控制台和日志文件输出
- commons-logging和Log4j 日志管理
- JDK java.util.logging.Logger以配置文件方式控制日志输出
- 自定义Android日志输出工具类
- log4j和commons.logging日志记录的使用方法