GWT:将客户端错误/堆栈跟踪发送到服务器?

时间:2012-03-06 06:11:43

标签: gwt error-handling

之前必须提出此问题,但我没有搜索过。我正在寻找一种方法来捕获所有客户端混淆的错误/堆栈跟踪并将它们发送到服务器进行调试。我确实使用window.onerror看到了关于javascript的一些内容,但我正在寻找一种方法来使用GWT执行此操作,然后显示一个非混淆的堆栈跟踪。

任何人都知道如何做到这一点?谢谢!

修改 经过几个小时的工作后,我通过以下方式将日志从GWT转移到服务器:

    GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() {
        @Override 
        public void onUncaughtException(Throwable e) {
            log.log(Level.SEVERE, e.getMessage(), e);
        }
    });

现在使用gwt附带的默认记录器。这是相关的.gwt.xml:

<inherits name="com.google.gwt.logging.Logging" />
<set-property name="gwt.logging.logLevel" value="WARNING" />
<set-property name="gwt.logging.enabled" value="TRUE" />
<set-property name="gwt.logging.simpleRemoteHandler" value="ENABLED" />
<set-property name="gwt.logging.consoleHandler" value="DISABLED" />
<set-property name="gwt.logging.developmentModeHandler" value="ENABLED" />  
<set-property name="gwt.logging.systemHandler" value="ENABLED" />
<set-property name="gwt.logging.popupHandler" value="DISABLED" />
<set-property name="gwt.logging.firebugHandler" value="DISABLED" />
<set-configuration-property name="compiler.emulatedStack.recordLineNumbers" value="true"/>
<set-configuration-property name="compiler.emulatedStack.recordFileNames" value="true"/>

我在网上到处搜索,我甚至发现这是来自gwt-log的东西,它似乎是在它被实现到GWT SDK之前:http://code.google.com/p/gwt-log/wiki/GettingStarted#Override_the_default_URL_which_the_RemoteLogger_connects_to

我按照上面链接中的说明更新了软件包名称,但没有。我现在用以下参数编译:-deploy war / WEB-INF / deploy /

这是我的web.xml的相关部分:

<!-- Servlets -->
<servlet>
    <servlet-name>RemoteLoggerServlet</servlet-name>
    <servlet-class>com.google.gwt.logging.server.RemoteLoggingServiceImpl</servlet-class>
    <init-param>
        <param-name>symbolMaps</param-name>
        <param-value>WEB-INF/deploy/**MYAPPNAMEHERE**/symbolMaps/</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>RemoteLoggerServlet</servlet-name>
    <url-pattern>/**MYAPPNAMEHERE**/remote_logging</url-pattern>
</servlet-mapping>

最终结果是我得到了错误,它们只是没有被去混淆。我做错了什么?

2 个答案:

答案 0 :(得分:7)

initParam适用于RequestFactoryServlet。使用RemoteLoggingServiceImpl,您应该调用其setSymbolMapsDirectory方法;通常通过子类化servlet并从构造函数或init方法调用方法。

答案 1 :(得分:3)

GWT内置了对日志记录的支持,detailed in the documentation。还支持sending log messages from the client to the server

如果要捕获所有异常,可能必须编写特定于浏览器的代码。例如,Mozilla有一个window.onerror事件,但我不认为这是标准的。