java – 在catch块中重新抛出异常是否有意义?

从catch块抛出异常只是为了记录消息是否有意义,以便我们确定导致异常的原因是什么?

  public void saveLogs(Logs logs) throws RemoteException
  {
        try
        {
            LogsOps.saveLogs(logs);
        }
        catch (RemoteException e)
        {
            log.info("RemoteException is thrown while trying to save logs ", e);
            throw new RemoteException("RemoteException caused while trying to save", e);
        }
    }

响应下面的一条评论,这个方法会抛出StackOverFlow异常,这里只是显示那些错误的log.info的实际实现.

     /** Log the message and the exception with a level of INFO.
     * @param message - The message text.
     * @param t - An exception to display.
     */
    public void info(Object message, Throwable t)
    {
        String nullSafeMessage = (message != null) ? message.toString() : t.getClass().getSimpleName();
        log.info(nullSafeMessage, t);
    }

所以永远不会抛出Stackoverflow异常.

最佳答案
这取决于什么会在更高的范围内捕获异常.如果没有其他任何东西可以记录消息,那么确定,这是有道理的 – 尽管我可能会重新抛出原始异常而不是创建一个新异常:

catch (RemoteException e)
{
    log.info("RemoteException is thrown while trying to save logs ", e);
    throw e;
}

但理想情况下,您在堆栈上方有一个catch块,它会适当地记录 – 如果您只是记录异常,那么无论如何都可以获取所有信息.

当您想要记录异常中不存在的信息(例如参数值)时,捕获/记录/重新抛出可能是有意义的.

转载注明原文:java – 在catch块中重新抛出异常是否有意义? - 代码日志