客户那边出了点问题,我以前编写的一个功能老是在第二步的时候出错。具体是什么原因呢?我首先连到客户应用,使用正确的账号和密码进去了,重现了该问题。
由于是在APPLET端的开发,我查看了APPLET中的出错信息,这个很明显,就是在获取用户数据库的时候出错了。具体是什么原因呢?还是需要得到客户那边的日志信息。
日志信息非常重要。以前对日志系统没有太深刻的体会,也没有实际做技术支持的体会。今天拿到日志信息,满以为日志信息会提供给我详细的出错信息。但是,很可惜,自己编写的那段程序并没有将原始的出错信息给标明出来。
java 代码
- protected boolean insert2HSQLDB(Collection orginalDataList){
- try {
- connection.setAutoCommit(false);
- PreparedStatement ps = connection.prepareStatement(getInsert());
- for (Iterator iter = orginalDataList.iterator(); iter.hasNext();) {
- BaseObject element = (BaseObject) iter.next();
- if(!setInsertParameter(ps, element)) return false;
- if(-1 == ps.executeUpdate()){
- Debug.logError("Insert into HSQLDB error");
- return false;
- }
- }
- ps.close();
- connection.commit();
- return true;
- } catch (SQLException e) {
- e.printStackTrace();
- Debug.logError("SQL Exception in connect to HSQL DB");
- try {
- connection.rollback();
- } catch (SQLException e1) {
- e1.printStackTrace();
- }
- return false;
- }
- }
这段代码中有很多问题。特别是在日志处理上。我只是简单的描述了出错的信息。但是并没有将程序调试的主要信息:Exception给输出来。
现在我只能知道是在这段代码中出的错,但是,通过日志信息我并不知道具体是那一行代码出的问题。如果之前我将e给输出的话,那肯定就不会存在现在这个问题。
代价是很严重的。由于不知道用户那边是什么情况,明天只好去用户那边看看具体出了什么问题。再说一点:e.printStackTrace(),只会在控制台输出信息,并不会记录在日志文件中。
怎么连这点概念都没有呢……SB得要死。实在是郁闷。
经验:日志输出的时候要注意:
1。日志的级别
2。日志输出要将原始出错信息给包含出来。