2011-10-03 74 views
1

我创建了一个CustomExceptionClass,它的消息来自配置文件并且对用户来说是一个友好的消息。自定义异常。在哪里登录

然后我想记录那个异常被抛出,因为如果出错了,我想知道详细信息,然后我可以解决这个问题。所以,我怀疑。

在哪里使用log4j记录这些异常?在CustomExceptionClass里面,或者我让引发这个异常的方法记录它呢?

回答

3

无论您在何处捕捉异常,都应该记录日志。如果你不在任何地方捕捉它,这真的取决于你如何运行你的应用程序。

1

我通常在自定义异常中重载ToString和/或GetMessage,并简单地按照正常情况记录它们。

3

我不确定你是否有关于log4j的问题,但该API只需要一些东西来呼叫log.error(Object,Throwable),将消息作为第一个参数传递,并将错误作为第二个参数传递。 (log当然是一个Log4J的记录仪参考。)

关于在哪里打电话log.error的问题,不要你CustomExceptionClass子类Throwable中调用从log.error。相反,我会做出如下决定:

如果您想记录有关发生了什么的详细信息,但您不打算将这些详细信息放入Exception的子类中,则在抛出错误之前记录详细信息。

同样,如果你想记录某些特定的事情,不管异常是否被捕获或如何被捕获,那么显然你需要在抛出异常之前做到这一点。对于谁调用非私有方法,您的控制权很小。

否则登录catch块。这使您可以跟踪发生了什么以及您的应用程序如何响应。如果你只有第一条信息,那么其他人将不得不阅读代码才能理解“那又怎样?”

最后,对所有线程使用未捕获的异常处理程序是一种很好的做法。有关更多详情,请参阅Thread.UncaughtExceptionHandler。基本上你至少要在长时间运行的应用程序中记录所有异常。

2

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