Java如何记录异常到数据库(最好不用log4j)

fatso1984 2009-10-23 07:09:45
问题是这样的一个项目中,如果出现异常,就在数据库中记录该异常出现的时间和信息
别人提供了我2种方法
1.继承Exception类,之后可能出现异常的地方都抛出我这个继承了Exception的类
2.写一静态方法,每个出现异常的地方都进行捕捉,之后再捕捉到的时候调用我的方法进行数据库操作
明显第一种比第二种好,但是我知道继承Exception后就不知道怎么写下去了。。。请大家指教一下,谢谢!
...全文
1188 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
jwtigerqwe 2009-10-27
  • 打赏
  • 举报
回复
路过 帮顶 学习
Gkilroy 2009-10-27
  • 打赏
  • 举报
回复
不好意思,引用错了,应该引用 #18楼的
Gkilroy 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 gkilroy 的回复:]
楼主需要搞清楚一个问题,你既然已经决定对这些异常进行捕获了,为什么还要继续往上抛?
建议:
try{
  //Exceptionable code.
} catch(Exception ex){
  //你应该知道这里是什么异常吧?
  Util.saveExceptionIntoDB(ex.getMessage(), new Date()); //将异常信息和时间通过工具类保存到数据库中
  //如果还想继续往上抛,可以继续,但是不清楚楼为什么你还要throws
  throw new SelfDefineException(); 
}
[/Quote]

这样也不现实吧,那你岂不是每个方法都要throws?
应该对可能产生异常的地方进行异常捕获,1+1的地方根本没必要care.

至于你说的服务器负载过高,也可以捕获.不是很明白,这也是异常?如果不是那怎么抛出来的?我倒是碰到过一次,程序总是运行出错.catch Exception根本捕获不到,最后catch throwable捕获到了,是内存溢出.这个也只能证明,outOfMemory也是一个异常对象.但负载过高也有异常对象对应吗?
Gkilroy 2009-10-26
  • 打赏
  • 举报
回复
楼主需要搞清楚一个问题,你既然已经决定对这些异常进行捕获了,为什么还要继续往上抛?
建议:
try{
//Exceptionable code.
} catch(Exception ex){
//你应该知道这里是什么异常吧?
Util.saveExceptionIntoDB(ex.getMessage(), new Date()); //将异常信息和时间通过工具类保存到数据库中
//如果还想继续往上抛,可以继续,但是不清楚楼为什么你还要throws
throw new SelfDefineException();
}
BearKin 2009-10-26
  • 打赏
  • 举报
回复
不在catch中调用在哪调用捏..?
fatso1984 2009-10-26
  • 打赏
  • 举报
回复
我明白你的意思..但是我现在的需求就是捕获所有异常.已知的,未知的.我不可能所有的代码中都进行try和catch,我想能不能用一种方法在抛到最后的时候,进行捕获..但是我想了很久,除非改写Exception或者Throwable,应该没有啥方法..
现在的任务就是捕获所有异常
我也是听说,一个项目中可以捕获,连服务器负载过高都可以捕获.
fatso1984 2009-10-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 bearkin 的回复:]
引用 13 楼 fatso1984 的回复:
我们项目要求是记录所有异常...

。。。。。。明明能避免的异常你捕捉 会被骂的。。
[/Quote]
咱不讨论这个问题了...兄弟你能给我个切实可行的方法么?你说的方法也是在catch中调用是么?
BearKin 2009-10-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 fatso1984 的回复:]
我们项目要求是记录所有异常...
[/Quote]
。。。。。。明明能避免的异常你捕捉 会被骂的。。
fatso1984 2009-10-24
  • 打赏
  • 举报
回复
我们项目要求是记录所有异常...
BearKin 2009-10-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fatso1984 的回复:]
自己顶一下
[/Quote]

没啥难的 首先你得有那张数据表 出异常的时候捕捉下 然后将异常信息全部入库 再抛出异常 就完事了
不过你8L的情况我需要告诉你下 有些异常可以在程序中避免 所以就不要记录了(或许说那个异常就是人为的 比如空指针) 这个你得区分好
fatso1984 2009-10-24
  • 打赏
  • 举报
回复
自己顶一下
BearKin 2009-10-24
  • 打赏
  • 举报
回复
...?啥第二个方法 记录异常就记录异常吧 问题主要是你分清楚什么异常该记录
fatso1984 2009-10-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 bearkin 的回复:]
引用 9 楼 fatso1984 的回复:
自己顶一下


没啥难的 首先你得有那张数据表 出异常的时候捕捉下 然后将异常信息全部入库 再抛出异常 就完事了
不过你8L的情况我需要告诉你下 有些异常可以在程序中避免 所以就不要记录了(或许说那个异常就是人为的 比如空指针) 这个你得区分好
[/Quote]

你是说的我所说的第二种方法么?
fatso1984 2009-10-23
  • 打赏
  • 举报
回复
貌似我的第一种方法有些行不通,比如我自定义的一场叫AutoException但是我有一个方法
public void function() throws AutoException
{
throw new NullPointerException() ;
}
它抛出了一个NullPointerException,虽然我抛出了一个AutoException,但是因为
NullPointerException的父类是Exception而不是AutoException,所以就算AutoException
覆写任何Exception的方法都无效,因为AutoException根本不是NullPointerException的父类
所以根本不会触发到任何方法.
换句话说,一个方法中如果没有抛出和捕捉异常,但是此方法出现了一些异常,是无法捕获的,无法对未知异常进行处理,除非可以改变Exception
zl3450341 2009-10-23
  • 打赏
  • 举报
回复
mark

路过 学习
fatso1984 2009-10-23
  • 打赏
  • 举报
回复
楼上能说的具体一点么?
水中影子 2009-10-23
  • 打赏
  • 举报
回复
写一个方法传一个string类型的错误信息,添加到数据库
fatso1984 2009-10-23
  • 打赏
  • 举报
回复
我个人认为也是像三楼兄弟说的那样,构造函数加载,但是这样是否真的成立
我还想问一下2楼的兄弟,是不是用构造函数,如果不用构造函数怎样去除发这个函数?
唐华嶓 2009-10-23
  • 打赏
  • 举报
回复
1.继承Exception类,之后可能出现异常的地方都抛出我这个继承了Exception的类

应该就是在构造的时候要把异常写到数据库里,那就写一个方法进行数据库操作,再在构造方法中调用该方法
swandragon 2009-10-23
  • 打赏
  • 举报
回复
1.继承Exception类,之后可能出现异常的地方都抛出我这个继承了Exception的类

自己写一个异常类,继承Exception类
方法里面封装捕获到的异常
在写一个方法,用来向数据库中插入异常信息
加载更多回复(1)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧