commons-logging日志输出自定义异常

原创 2013年12月04日 15:43:30

日志输出在任何一个项目中都是不可缺少的重要功能,它不但在项目开发阶段对于项目的调试有很大的帮助,在程序运行阶段由于忠实记录程序运行过程中的各种操作以及出现的各种错误信息,对于项目后期的运行维护也有重要作用。所以实现日志记录功能对于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文件

### 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,其实就是扩大一下输出范围而已。这样整个日志输出功能我们就完成了。

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

存储那些事儿(一):异构虚拟化一种实现SMIS

1. 背景        企业存储是企业信息系统管理很重要的组成部分。企业存储包含了大量的数据,供大量人使用。对于航空系统和金融系统来说,信息存储就更加重要了。 作为企业信息存储,扩展性是非常重要的,...

服务器、存储和网络虚拟化的实现与应用

虚拟化技术已经成为数据中心必备的技术之一,那什么叫虚拟化技术呢?虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配...

为java.util.logging自定义文件处理器及日志输出格式

为java.util.logging自定义文件处理器及日志输出格式 文章分类:Java编程        最近闲来无事,刚好拾起了来公司的第一个项目,发现里面的logging功能有点弱,竟然不支持按...

在Spring中配置使用commons-logging的simplelog来输出日志

烦透了log4j,最新版的包结构变动也不做下兼容,在spring项目中用会爆找不到class,maven仓中的老版又依赖了一大堆Java1.4的东西,实在是不爽,于是果断抛弃,改用commons-lo...

java.util.logging自定义打印日志

知识准备(如有不全,请查看jdk的api): 1、 Logger 属性  Filter 获取或设置过滤器以控制此 Logger 的输出。  Level 获取或设置为此 Logger...

Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志

在使用SimpleMappingExceptionResolver实现统一异常处理后(参考Spring MVC的异常统一处理方法),发现出现异常时,log4j无法在控制台输出错误日志。因此需要自定义一...

java日志commons-logging/log4j/slf4j/logBack需要知道的几件事

如果对于commons-loging、log4j、slf4j、LogBack等都已经非常清楚了,可以忽略本文。几次解决日志冲突问题时对这几个概念的简单总结,希望对这块基础没有理解透的同学能有所帮助,当...

使用commons.logging中的SimpleLog显示调试和日志信息

1、下载commons-logging-1.1.1-bin.zip文件,解压之后找到文件:commons-logging-1.1.1.jar 2、在Eclipse中建立一个Web工程,并配置能在To...
  • gxmark
  • gxmark
  • 2012年03月09日 23:36
  • 3412
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:commons-logging日志输出自定义异常
举报原因:
原因补充:

(最多只允许输入30个字)