GWT: Отправить клиентские ошибки / трассировки стека на сервер? - PullRequest
5 голосов
/ 06 марта 2012

Это должно было спрашиваться раньше, но у меня ничего не было в поисках. Я ищу способ перехватить все запутанные ошибки / следы стека на стороне клиента и отправить их на сервер для отладки. Я видел кое-что об этом для javascript, используя window.onerror, но я ищу способ сделать это с помощью GWT, а затем отобразить неотоблаченную трассировку стека.

Кто-нибудь знает, как это сделать? Спасибо!

Edit: Проработав над этим еще несколько часов, я перенес логи с GWT на сервер через:

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

То есть использует Logger по умолчанию, включенный в 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 ]

7 голосов
/ 06 марта 2012

initParam для RequestFactoryServlet. С RemoteLoggingServiceImpl вы должны вызывать его setSymbolMapsDirectory метод; обычно путем подкласса сервлета и вызова метода из конструктора или init метода.

3 голосов
/ 06 марта 2012

GWT имеет встроенную поддержку регистрации, как указано в документации 1002 *.Также поддерживается отправка сообщений журнала от клиента на сервер .

Возможно, вам придется написать специальный код браузера, если вы хотите перехватить все исключения.Например, у Mozilla есть событие window.onerror , однако я не думаю, что это стандарт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...