2012-03-06 10 views
5

Esto debe haberse preguntado antes, pero no he tenido ninguna en las búsquedas. Estoy buscando una forma de detectar todos los errores/restos de pila ofuscados del lado del cliente y enviarlos al servidor para su depuración. Vi algo sobre esto para javascript usando window.onerror, pero estoy buscando una forma de hacer esto con GWT, y luego mostrar un rastro de pila no ofuscado.GWT: ¿envía errores de cliente/rastros de pila al servidor?

¿Alguien sabe cómo hacer esto? ¡Gracias!

Editar: Después de trabajar en esto durante varias horas más, tengo los registros que pasan desde GWT al servidor a través de:

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

que está utilizando el valor predeterminado Logger incluye con GWT ahora . este es el .gwt.xml relevante:

<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"/> 

He buscado por todas partes en línea, e incluso he encontrado esto que es algo de GWT-registro, que parece que es antes de que se implementó en el SDK de GWT: http://code.google.com/p/gwt-log/wiki/GettingStarted#Override_the_default_URL_which_the_RemoteLogger_connects_to

Seguí las instrucciones del enlace de arriba, actualizando los nombres de los paquetes y lo que no. Compilo ahora con el siguiente argumento: la guerra -Implemente/WEB-INF/desplegar/

y esta es la parte pertinente de mi 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> 

El resultado final es que consigo los errores , simplemente no están desconfigurados. ¿Qué estoy haciendo mal?

Respuesta

7

El initParam es para el RequestFactoryServlet. Con el RemoteLoggingServiceImpl se supone que debes llamar a su método setSymbolMapsDirectory; generalmente subclasificando el servlet y llamando al método desde el constructor o el método init.

+0

Espera, ¿así que puedo desobustar mis registros con RequestFactoryServlet? – spierce7

+1

@ spierce7: No necesita el parámetro init en su gwt.xml. Simplemente agregue '' a su gwt.xml. Además, el despliegue no es necesario si usa la ubicación predeterminada, ya que está haciendo –

+0

@HilbrandBouwkamp Hola, gracias por su comentario. No tengo un parámetro init en mi gwt.xml. ¿Cuál es el compilador set-property-name = ".stackMode "replace? No estoy seguro de que entiendo. Por supuesto, necesito tener RemoteLoggingServlet implementado correctamente? EDIT: así la propiedad compiler.stackMode reemplaza a recordLineNumbers y recordFileNames? – spierce7

3

GWT ha incorporado soporte para el registro, como detailed in the documentation. También hay soporte para sending log messages from the client to the server.

Puede que tenga que escribir el código específico del navegador si desea capturar todas las excepciones. Por ejemplo, Mozilla tiene un evento window.onerror, sin embargo, no creo que esto sea estándar.

+0

después de hacer más búsquedas, parece que podría haber una manera de hacerlo con GWT.setUncaughtExceptionHandler, pero ¿cómo podría obtener el error de vuelta al servidor (App Engine), no mostrarse y mostrarse en el registro? – spierce7

+0

Vea los enlaces en mi respuesta anterior ... agregue un gwt.logging.simpleRemoteHandler a su configuración de registro. – ColinE

+0

Eso es correcto, pero terminó siendo mucho más que eso. Tuve que implementar un servlet de registro remoto que recibimos para recibir los registros remotos y configurar un grupo de opciones que ni siquiera se mencionan en ese enlace, para que no apareciera un cuadro de registro en la parte superior izquierda de mi aplicación . No sé por qué la documentación es tan incompleta. De todos modos, tengo todo funcionando, excepto por la desconfusión. ¡Gracias por su ayuda hasta ahora! – spierce7

Cuestiones relacionadas