你可以使用cat.error("Err Msg",exception);这个方法

解决方案 »

  1.   

    直接把e.pritStackTrace()用cat.error打出来行不行?
    StringWriter s = new StringWriter();
    e.printStackTrace(new PrintWriter(s));
    cat.error( s.toString());
      

  2.   

    两位大虾说的都有道理。但是,我的系统是给别人用的,难保它用的时候就写一句e.printStackTrace(),所以我不能强迫要求使用者不准用e.printStackTrace(),只能在自己的系统中加入防止出现意外的功能。
    请两位再帮忙想想,想想。
      

  3.   

    通常e.printStackTrace()会把信息在控制台输入,而cat.error会输出在log文件中,你说的“输出结果就不是完全按照正确的顺序了”到底是怎么一回事,能说详细一点么?
      

  4.   

    To 光
      例如:
        try{
        ...
        }catch(Exception e){
          e.printStackTrace();
          cat.error("Exception found!");
        }
    执行结果有可能成为
      ... Exception found!
      java.lang.Exception
           at ...
           at ...
    顺序颠倒了。这是一种可能,因为结果可能性很多,不可预知。
      

  5.   

    你说你的系统给别人用的,那么你的日志信息应该专门输入到指定的文件,而不是和e.printStackTrace()混在一起(我想你的日志信息输出是不是现在指定到控制台了),e.printStackTrace()起了另外一个线程也是理所当然的,log4j怎么能去控制到Exception?
      

  6.   

    我想你的做法应该是:
    1,指定日志信息的log文件(不能在控制台输入)
    2,在程序中将catch到的exception用前面我说的方法,把e.printStackTrace的内容输入到log文件中(我想这种做法应该没有你所说的问题)。
    3,使用你系统的人若是用了e.printStackTrace,和你没有什么关系,因为你的log输入在自己的日志文件中了,而e.printStackTrace()只能简单的在控制台输出。
      

  7.   

    但是Log4j也提供了ConsoleAppender用来输出到控制台中呀。而且,我也需要输出到控制台中。就是说,我使用了ConsoleAppender和FileAppender,让信息同时输出到控制台和文件。如果混用了e.printStackTrace(),输出到文件的信息肯定不会受影响,但输出到控制台的信息就有问题了。
      

  8.   

    我觉得控制台真的不要控制,呵呵~
    即使你真的可以控制了e.printStackTrace的问题,也没什么用,还有好多有关系统server自身的log也会在控制台出,肯定会受影响的。
    从你现在的情况看,要勉强这样做下去,恐怕不考虑考虑线程控制不行,不过这样是不是很不好,因为照你所说,你的系统给别人用,那么你是不是在别人用System.out或则是e.printStackTrace的时候都要求他加上线程控制呢?
      

  9.   

    我不明白有什么特殊原因要让你将这两个混起来用。
    反正,你自己是不可能控制到别人程序的写法的。
    除非你自己定义一套Exception出来,将e.printStackTrace重写。