gpt4 book ai didi

java - GWT 服务异常日志记录的最佳实践

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:13:38 25 4
gpt4 key购买 nike

我决定将日志系统添加到我的 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 对话框,该对话框显示一个表单,该表单对接受错误报告的不同服务器执行 POST。该表单允许用户输入错误发生时他们正在做的事情的描述。

在客户端,如果你想得到stack trace,你需要写一点额外的代码:

// 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 - GWT 服务异常日志记录的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4193373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com