处理 Throwable 与 Exception 以进行日志记录
Handling Throwable vs. Exception for logging
我正在使用接受异常的日志记录包。我有一个我自己的 default/uncaught 异常处理程序,它当然必须接受 Throwable。如果 Throwable 是 Exception 的一个实例,我可以将其投掷到记录器。但是,如果它是一个 Throwable,那是行不通的。目前我正在做类似下面的事情,但问题是基于 Throwable 的新异常丢失了堆栈跟踪信息。有什么方法可以基于零售堆栈跟踪的 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
第 3 方库在 API 中指定了 Exception,但我还是决定向它发送一个 Throwable 以查看会发生什么(因为它似乎在内部实现它,因为 Throwable 会更有意义)。无论我发送 Exception 还是 Throwable,它仍然可以正常工作。然后我将我的默认处理程序和我的中间层也翻转到 Throwable 并测试了一些已知错误。还是一切都好。不太喜欢做与定义的 API 相反的事情,但在这种情况下,这似乎是文档错误或疏忽。如果未来的版本将行为更改为定义的行为,也许我会更聪明并且能够解决这个问题...... :-)
我正在使用接受异常的日志记录包。我有一个我自己的 default/uncaught 异常处理程序,它当然必须接受 Throwable。如果 Throwable 是 Exception 的一个实例,我可以将其投掷到记录器。但是,如果它是一个 Throwable,那是行不通的。目前我正在做类似下面的事情,但问题是基于 Throwable 的新异常丢失了堆栈跟踪信息。有什么方法可以基于零售堆栈跟踪的 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
第 3 方库在 API 中指定了 Exception,但我还是决定向它发送一个 Throwable 以查看会发生什么(因为它似乎在内部实现它,因为 Throwable 会更有意义)。无论我发送 Exception 还是 Throwable,它仍然可以正常工作。然后我将我的默认处理程序和我的中间层也翻转到 Throwable 并测试了一些已知错误。还是一切都好。不太喜欢做与定义的 API 相反的事情,但在这种情况下,这似乎是文档错误或疏忽。如果未来的版本将行为更改为定义的行为,也许我会更聪明并且能够解决这个问题...... :-)