`

日志处理:承重的代价

阅读更多

        客户那边出了点问题,我以前编写的一个功能老是在第二步的时候出错。具体是什么原因呢?我首先连到客户应用,使用正确的账号和密码进去了,重现了该问题。

        由于是在APPLET端的开发,我查看了APPLET中的出错信息,这个很明显,就是在获取用户数据库的时候出错了。具体是什么原因呢?还是需要得到客户那边的日志信息。

        日志信息非常重要。以前对日志系统没有太深刻的体会,也没有实际做技术支持的体会。今天拿到日志信息,满以为日志信息会提供给我详细的出错信息。但是,很可惜,自己编写的那段程序并没有将原始的出错信息给标明出来。

java 代码
  1. protected boolean insert2HSQLDB(Collection orginalDataList){   
  2.         try {   
  3.             connection.setAutoCommit(false);   
  4.             PreparedStatement ps = connection.prepareStatement(getInsert());   
  5.             for (Iterator iter = orginalDataList.iterator(); iter.hasNext();) {   
  6.                 BaseObject element = (BaseObject) iter.next();                 
  7.                 if(!setInsertParameter(ps, element)) return false;   
  8.                 if(-1 == ps.executeUpdate()){   
  9.                     Debug.logError("Insert into HSQLDB error");   
  10.                     return false;   
  11.                 }   
  12.             }   
  13.             ps.close();   
  14.             connection.commit();   
  15.             return true;   
  16.         } catch (SQLException e) {   
  17.             e.printStackTrace();   
  18.             Debug.logError("SQL Exception in connect to HSQL DB");   
  19.             try {   
  20.                 connection.rollback();   
  21.             } catch (SQLException e1) {   
  22.                 e1.printStackTrace();   
  23.             }   
  24.             return false;   
  25.         }   
  26.     }  

        这段代码中有很多问题。特别是在日志处理上。我只是简单的描述了出错的信息。但是并没有将程序调试的主要信息:Exception给输出来。

        现在我只能知道是在这段代码中出的错,但是,通过日志信息我并不知道具体是那一行代码出的问题。如果之前我将e给输出的话,那肯定就不会存在现在这个问题。

       代价是很严重的。由于不知道用户那边是什么情况,明天只好去用户那边看看具体出了什么问题。再说一点:e.printStackTrace(),只会在控制台输出信息,并不会记录在日志文件中。

       怎么连这点概念都没有呢……SB得要死。实在是郁闷。

       经验:日志输出的时候要注意:

      1。日志的级别

      2。日志输出要将原始出错信息给包含出来。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics