【问题标题】:Custom exception. Where to log it自定义异常。在哪里记录
【发布时间】:2011-11-30 01:47:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: java exception logging log4j


    【解决方案1】:

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

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

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

    同样,如果您想记录特定的内容而不管是否或如何捕获异常,那么显然您需要在抛出异常之前执行此操作。您对谁调用非私有方法的控制相对较少。

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

    最后,对所有线程使用未捕获的异常处理程序被认为是一种很好的做法。有关详细信息,请参阅Thread.UncaughtExceptionHandler。基本上,您确实希望至少记录长时间运行的应用程序中的所有异常。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2015-08-28
            • 2021-12-18
            • 1970-01-01
            • 2021-12-29
            • 2012-08-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多