我知道这是一个反模式,但在我的RESTful应用程序中,我想记录并抛出。
我有这个代码
log.warn("Cannot determine provider from name: " + name);
throw X.bad("Cannot determine provider from name: " + name);
这是不应该发生的情况 - 它只是if / else if系列中的最后一个。但是,如果它确实发生,它可能表示前端错误/错误。
我确实想过将一个log.warn(...)放在X.bad()中,但后来记录类是X,并且堆栈跟踪比需要抛出异常时更大。
有没有人有更集成的解决方案?
(我想要停止重复文本组件而不是任何事情)
由于
罗布
答案 0 :(得分:3)
整体解决方案是在调用堆栈的上层设置故障屏障。此故障屏障将替换您的步骤1.它将捕获所有异常,并相应地记录它。
我认为您未检查的事情是创建一个自定义异常,扩展RuntimeException(即MyAppRuntimeException),并在其中添加您需要记录日志的级别,以及您要传输给您的任何其他字段故障障碍。
您的故障障碍还需要捕获所有其他异常(异常,运行时等)并使用默认行为管理它们。
在抛出异常之前,您不需要记录,只需要在一个地方登录:当您捕获具有故障障碍的异常时。
如果您记录堆栈跟踪,而不仅是消息,您仍然可以在日志中看到问题的根源。
之后,你继续这样做。发回ReST消息。