自定义例外。在哪里记录它

时间:2011-10-03 16:33:04

标签: java exception logging log4j

我创建了一个CustomExceptionClass,它的消息来自配置文件,并且是给用户的更友好的消息。

然后我想记录被抛出的异常因为,如果出现问题,我想知道细节然后我可以解决这个问题。所以,我有一个疑问。

使用log4j在哪里记录这些异常?在CustomExceptionClass中,或者我让抛出此异常的方法记录它?

4 个答案:

答案 0 :(得分:3)

您应该记录捕获异常的任何位置。如果你没有在任何地方捕捉它,那真的取决于你如何运行你的应用程序。

答案 1 :(得分:3)

我不确定您是否对log4j有疑问,但该API只需要调用log.error(Object,Throwable),将消息作为第一个参数传递,将错误作为第二个参数传递。 (log当然是Log4J记录器参考。)

关于拨打log.error的地方的问题,请勿在{{1​​}}的{​​{1}}子类内拨打log.error。相反,我会做出如下决定:

如果要记录确切发生的事情的详细信息,但是您不打算将这些详细信息放入Exception的子类中,请在抛出错误之前记录详细信息。

类似地,如果您想记录某些特定内容,无论是否或如何捕获异常,那么显然您需要在抛出异常之前执行此操作。你对谁调用非私有方法的控制相对较少。

否则登录catch块。这使您可以跟踪发生的情况以及应用程序响应的结果。如果你只有第一条信息,那么其他人必须阅读代码才能理解“那么什么?”

最后,对所有线程使用未捕获的异常处理程序被认为是一种好习惯。有关详细信息,请参阅CustomExceptionClass。基本上你真的想要至少记录长期运行的应用程序中的所有异常。

答案 2 :(得分:2)

您应该将其记录在错误处理代码中,而不是最初创建错误的位置。

答案 3 :(得分:1)

我通常会在自定义异常中重载ToString和/或GetMessage,只需按正常情况记录它们。