2012-02-12 656 views
77

Estoy depurando una aplicación GWT y necesito imprimir algunas cosas en la consola para fines de prueba. System.out.println y GWT.log no funcionan. ¿Alguien tiene alguna idea?Cómo imprimir a la consola en GWT

+1

Pruebe las respuestas publicadas aquí: http://stackoverflow.com/questions/17463928/gwt-log-logs-not-showing-in-the- gwt-dev-mode-console/18216990 # 18216990 – Chepech

Respuesta

64

Citando la documentación:

Añadir registro cronológico GWT es realmente muy simple, tan simple como el siguiente ejemplo de código. Sin embargo, entender cómo funciona el registro y cómo configurarlo correctamente es importante, así que tómese el tiempo para leer el resto de este documento.

http://code.google.com/webtoolkit/doc/latest/DevGuideLogging.html

La forma más sencilla para habilitar el registro es:

# In your .gwt.xml file 
<inherits name="com.google.gwt.logging.Logging"/> 

# In your .java file 
Logger logger = java.util.logging.Logger.getLogger("NameOfYourLogger"); 
logger.log(Level.SEVERE, "this message should get logged"); 
+0

Gracias por su post Strelok! Esto es exactamente lo que estaba buscando !!! ¡No entiendo por qué la gente votó esta pregunta! –

+1

Creo que el comentario sobre GWT.log no funciona es la razón por la que votaron en contra. – checketts

+11

Sí, GWT.log solo funciona en DevMode, por lo que si está compilando su código con el compilador GWT nunca verá ningún resultado de GWT.log(). –

41

que tenía que hacer esto en el contexto de una aplicación GWT que se ha implementado en un dispositivo Android/emulador a través de PhoneGap (y gwt-phonegap). Ni System.out.println() ni GWT registro que el anterior (con la declaración del módulo) se presentó en Logcat de Android, por lo que recurrió a un simple envoltorio JSNI a console.log:

public void onModuleLoad() 
    { 
    Logger logger = Logger.getLogger("Test1.java"); 
    logger.log(Level.INFO, "ash: starting onModuleLoad (1)"); // not in logcat 
    System.out.println("ash: starting onModuleLoad (2)"); // not in logcat 
    consoleLog("ash: starting onModuleLoad (3)"); // This shows up 
    ... 
    } 

    native void consoleLog(String message) /*-{ 
     console.log("me:" + message); 
    }-*/; 
+0

Para todos los usuarios de IE: para evitar excepciones cuando las herramientas de desarrollo no están abiertas, es mejor que envuelva la llamada en un bloque try catch o utilice una de las soluciones que se indican aquí : http://stackoverflow.com/q/7742781/1845976 – schnatterer

+0

¿Podría echar un vistazo a [esta pregunta] (http://stackoverflow.com/questions/32438000/gwt-logger-not-getting-logs-below- nivel severo)? – displayname

+0

Esta es la respuesta correcta (método nativo) –

0

tuve este problema también . El registro de GWT funciona, pero como todo está convertido en javascript, se imprime en la salida del cliente, por lo que solo tiene que ver la consola de su navegador y estarán allí. En Google Chrome, haga clic en el botón Personalizar de triple línea en la esquina superior derecha, haga clic en Herramientas -> Herramientas del desarrollador y aparecerá la consola. Sus declaraciones solicitadas estarán allí. Además, Ctrl + Shift + I es el atajo que lo abre. Si desea imprimir en el servidor, ¿considero que los manejadores de registradores están en orden?

0

La url de documentación en la primera respuesta ya ofrece la opción de configuración diferente para iniciar sesión en diferentes lugares. Este framework que escribí te ofrece una aplicación útil y te permite elegir la implementación del registro en el lado del servidor. echar un vistazo: https://code.google.com/p/gwt-usefull-logging/

0

le sugiero que utilice GWT Developer mode Se añade un poco de sobrecarga provoca la compilación automática y en el servidor de código de asignación de código, pero es bastante claro cuando algunas excepciones surge en el lado del cliente de la aplicación. Quiero decir, algunas veces la consola de Chrome (o firebug o cualquier herramienta incorporada de depuración del navegador) no dice demasiado en esas situaciones, créanme, encontrar una NullPointerException es un dolor en el cuello cuando intentas descubrir qué está pasando alertando su código

0

para imprimir en la consola del navegador que estoy usando algo como esto:

EventLogger.java

public class EventLogger { 
    public static void logEvent(String subsys, String grp, String type) { 
     logEvent(GWT.getModuleName(), subsys, grp, 
       Duration.currentTimeMillis(), type); 
    } 

    public static native void logEvent(String module, String subsys, 
             String grp, double millis, String type) 
/*-{ 
    if ($wnd.__gwtStatsEvent) { 
     $wnd.__gwtStatsEvent({ 
      'moduleName':module, 
      'subSystem':subsys, 
      'evtGroup':grp, 
      'millis':millis, 
      'type':type 
     }); 
    } 
}-*/; 
} 
17

Para conectarse a los navegadores de consola que puede hacerlo utilizando nativa, de una manera muy sencilla. Muy útil en la depuración.

Si agrega un método nativo como el de abajo, puede enviar una cadena desde donde desee y lo registrará en la consola de navegadores.

public static native void console(String text) 
/*-{ 
    console.log(text); 
}-*/; 

Para obtener más información sobre el uso nativo en GWT: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html

+0

Además, en lugar de dar el parámetro como Cadena, puede darle algo más (ejemplo: JavaScriptObject) y consolar eso. – erkinyldz

+0

no funcionó para mí –

24

En GWT versión 2.6.0, el método GWT.log escribe un mensaje a la consola del navegador, no es necesario escribir métodos nativos.

+0

No funcionó en GWT 2.7.0 – pacoverflow

+1

Esperaba que esto funcionara. Agregué un GWT.log ("Fácil de encontrar") y luego buscó en todo el proyecto la cadena "Fácil de encontrar". Fue solo en mi fuente. Revisé los documentos de GWT. Dice que "GWT.log" es solo para el modo dev en la ventana de desarrollo. http://www.gwtproject.org/doc/latest/DevGuideLogging.html – ChrisCantrell

+0

No, GWT.log es solo para el modo DEV/SUPERDEV, pero no para el uso de producción (será recortado por el compilador de GWT). –

6

Simplemente resumiendo las diferentes posibilidades que se muestran en las respuestas de mreppy y Strelok en un fragmento. También he añadido una posible solución para excepciones IE como se describe aquí: Why does JavaScript only work after opening developer tools in IE once?

java.util.logging.Logger logger = Logger.getLogger(this.getClass().getSimpleName()); 

    native void jsConsoleLog(String message) /*-{ 
     try { 
      console.log(message); 
     } catch (e) { 
     } 
    }-*/; 

    private void log(final String message) { 
     // Logs to Dev mode console only 
     GWT.log(message); 
     // Logs to Dev mode and JavaScript console (requires configuration) 
     this.logger.log(Level.FINEST, message); 
     // Logs to JavaScript console only 
     jsConsoleLog(message); 
5

Otra variación utilizando la consola nativa ...

Añadir esta clase:

package XXX.XXX.XXX.XXX; 

public class Debug { 
    private static boolean isEnabled_ = false; 
    public static void enable() { isEnabled_ = true; } 
    public static void setEnabled(final boolean isEnabled) 
    { isEnabled_ = isEnabled; } 

    public static void log(final String s) 
    { if(isEnabled_) nativeConsoleLog(s); } 

    private static native void nativeConsoleLog(String s) 
    /*-{ console.log(s); }-*/; 
} 

A continuación, habilitar la depuración con ella en un cierto punto, al igual que al iniciar la aplicación:

public class XXXXXX implements EntryPoint { 
    @Override 
    public void onModuleLoad() { 
     Debug.enable(); 
     ... 
    } 
} 

Entonces sólo lo utilizan de esta manera:

Debug.log("Hello World!"); 
Cuestiones relacionadas