Zal*_*aka 9 java gwt logging spring exception
我决定将日志系统添加到我的gwt服务层.首先,我想记录从该层抛出的所有异常.我有一个类似于Spring的ServletDispatcher的对象,它调用其他服务.我以为我可以在那里添加日志记录,但我意识到GWT服务将ServletResponse中的已检查异常包装起来并取消选中UnexpectedException.
任何人都可以分享他对这个问题的经验吗?记录所有GWT服务的已检查和未检查异常的最佳方法是什么.
我找到了建议扩展RemoteServiceServlet并覆盖默认异常流的解决方案.但我发现这个解决方案太费时间了.anybode知道任何更简单的变体吗?
and*_*llr 12
在服务器端,我们有一个RemoteServiceServlet的子类,我们将其用于所有服务实现.你提到它似乎很耗时,但这就是代码的样子.你做了一次而且你已经完成了.
@Override
protected void doUnexpectedFailure(Throwable t) {
t.printStackTrace(System.err);
super.doUnexpectedFailure(t);
}
Run Code Online (Sandbox Code Playgroud)
注意:我们实际上并没有将它发送到System.err,你可能也不应该,但是你明白了.
在客户端,我们使用AsyncCallback的子类AsyncSuccessCallback.它为大多数RPC调用统一处理onFailure情况.我们的大部分回调代码都可以处理onSuccess案例,知道onFailure已被处理.它还提供了一个稍后更改此实现的位置.
public abstract class AsyncSuccessCallback<T> implements AsyncCallback<T> {
public void onFailure(Throwable t) {
handleException(t);
}
protected void handleException(Throwable t) {
Window.alert(t.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我们实际上并没有使用Window.alert,但是再一次,你明白了.我们在这种情况下所做的是显示一个GWT DialogBox,它显示一个表单,该表单对接受错误报告的其他服务器执行POST.该表单允许用户键入错误发生时他们正在做的事情的描述.
在客户端,如果要获取堆栈跟踪,则需要编写一些额外的代码:
// for lineEnding, use "<br>" for HTML, "\n" for text
public static final String getStackTrace(Throwable t, String lineEnding) {
Object[] stackTrace = t.getStackTrace();
if (stackTrace != null) {
StringBuilder output = new StringBuilder();
for (Object line : stackTrace) {
output.append(line);
output.append(lineEnding);
}
return output.toString();
} else {
return "[stack unavailable]";
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5259 次 |
最近记录: |