java – GWT服务异常记录的最佳实践

前端之家收集整理的这篇文章主要介绍了java – GWT服务异常记录的最佳实践前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我决定将日志系统添加到我的gwt服务层.首先我想记录从该层抛出的所有异常.我有一个类似于 Spring的ServletDispatcher的对象,它调用其他服务.我以为我可以在那里添加日志记录,但是我意识到GWT服务会在ServletResponse中包含检查的异常,并将其取消选中为UnexpectedException.

有人可以分享他的经验吗?记录所有GWT服务的检查和未检查的异常的最佳方式是什么?

我发现解决方案建议扩展RemoteServiceServlet并覆盖默认异常流.但是我觉得这个解决方案太耗时了.居民知道任何更容易的变种吗?

解决方法

在服务器端,我们有一个RemoteServiceServlet的子类,用于所有服务实现.你提到这似乎是耗时的,但是这是代码的样子.你做一次,你完成了.
@Override
protected void doUnexpectedFailure(Throwable t) {
    t.printStackTrace(System.err);
    super.doUnexpectedFailure(t);
}

注意:我们实际上并没有将它发送到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());
    }

}

注意:我们实际上并没有使用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]";
    }
}

猜你在找的Java相关文章