自定义异常.在哪里记录它



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

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

在哪里使用log4j记录这些异常?在CustomExceptionClass中,还是让抛出这个异常的方法记录它?

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

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

关于在哪里调用log.error的问题,不要从ThrowableCustomExceptionClass子类中调用log.error。相反,我将做出如下决定:

如果你想记录发生的事情的详细信息,但是你不打算把这些详细信息放到Exception的子类中,那么在抛出错误之前记录详细信息。

同样,如果你想记录一些特定的东西,而不管异常是否被捕获或如何被捕获,那么显然你需要在抛出异常之前这样做。对于谁调用非私有方法,你几乎没有控制权。

否则登录catch块。这允许您跟踪发生了什么以及应用程序如何响应结果。如果您只掌握了第一条信息,那么其他人将不得不阅读代码以理解"那又怎样?"

最后,对于所有线程使用未捕获的异常处理程序被认为是一种良好的实践。参见Thread.UncaughtExceptionHandler了解更多细节。基本上,您确实希望至少记录长时间运行的应用程序中的所有异常。

您应该在错误处理代码中记录它,而不是在最初创建错误的地方。

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

最新更新