请教一个异常处理方案!!!!!

要求: 所有的异常信息都要保存到文件里,每产生一次异常,生成一个文件.

我想了一个方案,所有的异常都统一抛出一个自定义异常AppException,在appException里提供一个makeReport方案,将这个异常的信息保存在文件里,那么写文件操作也会抛出IO异常.

这个时候我该怎么处理呢?
或者提供一下其他方案,只要能满足要求.

以下是伪代码:

[code="java"]
class AppException extends exception{

public void makeReport(){
//生成异常日志
try{
//写文件
...
}catch(IOException){
?????
}
}
}

class A{
private void aaa() throws AppException {
try{
...
}catch(...){
throw new AppException();
}
}

private void bbb(){
try{
aaa();
}catch(AppException e){
e.makeReport();// ???????
}
}
}
[/code]

像日志功能这些应该是项目的公共模块,你应该对日志功能做充分的测试,确保正常情况下不会出异常,能够应对性能、并发等的要求之后再拿来使用。
当然,这里访问文件出异常,你可以直接打在控制台的。

异常的出口exit可以做很多事情的,比如写文件、写数据库甚至发邮件等等。如果有io异常,可能是磁盘满了、日志文件不小心被删除了等等原因,正常情况下不会有异常。不知道你是什么项目,一般都有控制台的吧,没有控制台那么输出流会定位到文件的。比如linux下面就默认是nohup.out,一般的应用服务器如tomcat也有日志文件的,通常都在logs目录

Swing之类的项目?程序总有标准输出流和标准错误流的吧,把他们重定向到文件即可。

[code]
File f=new File("out.txt");

f.createNewFile();

FileOutputStream fileOutputStream = new FileOutputStream(f);

PrintStream printStream = new PrintStream(fileOutputStream);

System.setOut(printStream);

System.setErr(printStream);

[/code]

如果类似上面的代码也出异常,那程序根本不应该跑起来。

不应该改动原有代码框架,直接用aop控制,throw的时候记录日志就行了


你可以看看aspectj就知道我说的什么意思了,使用动态代理或者cglib,修改对应的类(execution,过滤需要处理的类),不破坏原有框架,它相当于修改过你想要代理的类,加入切面,把另外的逻辑加入到想要的位置
他能控制到方法的任意位置,比如执行前,执行后,执行中,抛异常后