急:e.printStackTrace()与Category.error(...)的矛盾 你可以使用cat.error("Err Msg",exception);这个方法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接把e.pritStackTrace()用cat.error打出来行不行?StringWriter s = new StringWriter();e.printStackTrace(new PrintWriter(s));cat.error( s.toString()); 两位大虾说的都有道理。但是,我的系统是给别人用的,难保它用的时候就写一句e.printStackTrace(),所以我不能强迫要求使用者不准用e.printStackTrace(),只能在自己的系统中加入防止出现意外的功能。请两位再帮忙想想,想想。 通常e.printStackTrace()会把信息在控制台输入,而cat.error会输出在log文件中,你说的“输出结果就不是完全按照正确的顺序了”到底是怎么一回事,能说详细一点么? To 光 例如: try{ ... }catch(Exception e){ e.printStackTrace(); cat.error("Exception found!"); }执行结果有可能成为 ... Exception found! java.lang.Exception at ... at ...顺序颠倒了。这是一种可能,因为结果可能性很多,不可预知。 你说你的系统给别人用的,那么你的日志信息应该专门输入到指定的文件,而不是和e.printStackTrace()混在一起(我想你的日志信息输出是不是现在指定到控制台了),e.printStackTrace()起了另外一个线程也是理所当然的,log4j怎么能去控制到Exception? 我想你的做法应该是:1,指定日志信息的log文件(不能在控制台输入)2,在程序中将catch到的exception用前面我说的方法,把e.printStackTrace的内容输入到log文件中(我想这种做法应该没有你所说的问题)。3,使用你系统的人若是用了e.printStackTrace,和你没有什么关系,因为你的log输入在自己的日志文件中了,而e.printStackTrace()只能简单的在控制台输出。 但是Log4j也提供了ConsoleAppender用来输出到控制台中呀。而且,我也需要输出到控制台中。就是说,我使用了ConsoleAppender和FileAppender,让信息同时输出到控制台和文件。如果混用了e.printStackTrace(),输出到文件的信息肯定不会受影响,但输出到控制台的信息就有问题了。 我觉得控制台真的不要控制,呵呵~即使你真的可以控制了e.printStackTrace的问题,也没什么用,还有好多有关系统server自身的log也会在控制台出,肯定会受影响的。从你现在的情况看,要勉强这样做下去,恐怕不考虑考虑线程控制不行,不过这样是不是很不好,因为照你所说,你的系统给别人用,那么你是不是在别人用System.out或则是e.printStackTrace的时候都要求他加上线程控制呢? 我不明白有什么特殊原因要让你将这两个混起来用。反正,你自己是不可能控制到别人程序的写法的。除非你自己定义一套Exception出来,将e.printStackTrace重写。 串口数据,急急急急急急! 如何以数据库中的数据为X轴和Y轴的坐标值,在一个二维平面上作图,图形能根据数据库中的数据动态重绘? 怎么又是noclassdeffounderror问题啊 有一个JNI的问题 有关SUPER 用法的问题 在linux底下用什么做java?(五百里加急!) 怎樣取小數點之後兩個位? 请教图片上传中的改变图片大小的问题!!急!!! 优秀的java集成开发环境 JAVA进销存管理系统运行问题 新编译的CLASS文件,需重启RESIN才能起作用,为什么???? szayang(炸弹) !你JDK的环境设置我没有看懂!
StringWriter s = new StringWriter();
e.printStackTrace(new PrintWriter(s));
cat.error( s.toString());
请两位再帮忙想想,想想。
例如:
try{
...
}catch(Exception e){
e.printStackTrace();
cat.error("Exception found!");
}
执行结果有可能成为
... Exception found!
java.lang.Exception
at ...
at ...
顺序颠倒了。这是一种可能,因为结果可能性很多,不可预知。
1,指定日志信息的log文件(不能在控制台输入)
2,在程序中将catch到的exception用前面我说的方法,把e.printStackTrace的内容输入到log文件中(我想这种做法应该没有你所说的问题)。
3,使用你系统的人若是用了e.printStackTrace,和你没有什么关系,因为你的log输入在自己的日志文件中了,而e.printStackTrace()只能简单的在控制台输出。
即使你真的可以控制了e.printStackTrace的问题,也没什么用,还有好多有关系统server自身的log也会在控制台出,肯定会受影响的。
从你现在的情况看,要勉强这样做下去,恐怕不考虑考虑线程控制不行,不过这样是不是很不好,因为照你所说,你的系统给别人用,那么你是不是在别人用System.out或则是e.printStackTrace的时候都要求他加上线程控制呢?
反正,你自己是不可能控制到别人程序的写法的。
除非你自己定义一套Exception出来,将e.printStackTrace重写。