相信大家都在测试程序的时候后遇到遇到很多麻烦,而且每次的错误信息只在控制台出现,下一次测试的时候就会被新的信息给覆盖了,那么我们想一个办法让错误信息输出到一个文件中就好了,就算再调试的时候错误信息也不会丢失。还有一点就是客户再用你的软件的时候,如果出现bug你也可以根据这个错误信息文件很快的锁定出错的位置和信息。下面讲一下log4j的具体用法:
首先第一步:在你项目的根录下配置一个log4j.properties文件,代码如下:
错误的级别由高到低分别是:FATAL ERROR WARN INFO DEBUG
//
log4j.rootLogger=INFO,A1,R
# ConsoleAppender 输出
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m %n
# File 输出 一天一个文件,输出路径可以定制,一般在根路径下
log4j.appender.R=org.apache.log4j.RollingFileAppender
//teachapp.log就是存放错误信息的.log的文件,下面是文件的路径,如果不存在的话会自动创建
log4j.appender.R.File=D://myjavapro//teacheapp1.1//teacheapp//teachapp.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] %m %n
第二步:声明一个变量logger,并把他实例化private Logger logger = Logger.getLogger(DepartmentServiceImpl.class);
DepartmentServiceImpl.class是你要测试的类的名字。
然后就是在你的抛出异常的catch中输出你的错误信息就行,下面就以我开发中的一个例子来讲一下吧:
public class DepartmentServiceImpl extends BaseImpl implements
DepartmentService {
private Logger logger = Logger.getLogger(DepartmentServiceImpl.class);
public int create(Department department) {
int state = 0;
if (department != null) {
String sql = "INSERT INTO T_DEPARTMENT(ID,DNAME,DCHAIRMAN,DTEL,DETAILS,MODIFIEDTIME,REMARK)VALUES(?,?,?,?,?,?,?)";
Connection conn = this.getConn();
PreparedStatement preparedStatement = null;
try {
preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1, PrimaryKeyGenerator.getPk());
preparedStatement.setString(2, department.getDname());
preparedStatement.setString(3, department.getChairman());
preparedStatement.setString(4, department.getDtel());
preparedStatement.setString(5, department.getDetails());
preparedStatement.setString(6, ChineseSimpleTime.getChTime());
preparedStatement.setString(7, department.getRemarks());
state = preparedStatement.executeUpdate();
conn.commit();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
logger.info("DepartmentServiceImpl---->create异常");
} finally {
try {
if (conn != null) {
conn.close();
}
if (preparedStatement != null) {
preparedStatement.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return state;
}
第三步:接下来就是写你的测试类了
package com.su02.teacheapp.tests.impls;
import com.su02.teacheapp.beans.Department;
import com.su02.teacheapp.impls.DepartmentServiceImpl;
import junit.framework.TestCase;
public class DepartmentServiceImplTest extends TestCase {
private DepartmentServiceImpl departmentServiceImpl;
@Override
protected void setUp() throws Exception {
departmentServiceImpl=new DepartmentServiceImpl();
super.setUp();
}
public void testDocreate(){
//这里我的department就这个是不为空的字段
Department department=new Department("外语学院","留名","101","123");
assertTrue(departmentServiceImpl.create(department)>0);
}
}
其实这个log4j的使用很简单的,只要稍微动一下脑子就可以搞定的!