代码之家  ›  专栏  ›  技术社区  ›  Brian Knoblauch

处理日志记录的可丢弃与异常

  •  1
  • Brian Knoblauch  · 技术社区  · 8 年前

    我正在使用一个接受异常的日志包。我自己有一个默认/未捕获的异常处理程序,当然必须接受Throwable。如果Throwable是一个异常实例,我可以直接向记录器抛出。然而,如果是一次性的,那就行不通了。目前,我正在执行以下操作,但问题是基于Throwable的新异常会丢失stacktrace信息。是否有某种方法可以基于零售stacktrace的Throwable创建异常?

    if (e instanceof Exception)
        logger((Exception) e); // All good, we get our stack trace logged
    else
        logger(new Exception(e)); // Sadness, stack trace missing
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Brian Knoblauch    8 年前

    第三方库在API中指定了异常,但我决定向它发送一个Throwable,看看会发生什么(因为在内部实现Throwable似乎更有意义)。无论我是发送一个异常还是一个可丢弃的,它仍然可以很好地工作。然后,我将我的默认处理程序和中间层也翻转为Throwable,并使用一些已知错误进行测试。还是很好。不太喜欢做与定义的API相反的事情,但在这种情况下,这似乎是一个文档错误或疏忽。如果将来的版本将行为更改为定义的行为,也许我会比…更聪明,并且能够解决这个问题…:-)