examples - gwt tutorial
Cómo imprimir en la consola en GWT (10)
Citando la documentación:
Agregar el registro GWT es realmente bastante simple, tan simple como el siguiente ejemplo de código. Sin embargo, es importante comprender cómo funciona el registro y cómo configurarlo correctamente, 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 de 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");
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?
En la versión 2.6.0 de GWT, el método GWT.log escribe mensajes en la consola del navegador, no es necesario que escriba métodos nativos.
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 API útil y te permite elegir tu implementación de registro en el lado del servidor. Eche un vistazo: https://code.google.com/p/gwt-usefull-logging/
Necesitaba hacer esto en el contexto de una aplicación GWT que se implementó en un dispositivo / emulador Android a través de PhoneGap (y gwt-phonegap). Ni System.out.println () ni el registro de GWT como el anterior (con la declaración del módulo) aparecieron en el logcat de Android, así que recurrí a un simple contenedor JSNI para 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 );
}-*/;
Otra variación más usando la consola nativa ...
Agrega 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 ); }-*/;
}
Luego, habilite la depuración con él en algún momento, como al iniciar la aplicación:
public class XXXXXX implements EntryPoint {
@Override
public void onModuleLoad() {
Debug.enable();
...
}
}
Entonces solo úsalo así:
Debug.log("Hello World!");
Para imprimir en la consola del navegador, estoy usando algo como esto:
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
});
}
}-*/;
}
Para iniciar sesión en la consola de navegadores, puede hacerlo usando nativo, de una manera muy simple. Muy útil en la depuración.
Si agrega un método nativo como en la siguiente, 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 de nativo en GWT: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
Solo resumiendo las diferentes posibilidades que se muestran en las respuestas de mreppy y Strelok en un fragmento. También agregué una solución posible para las excepciones de IE como se describe aquí: ¿Por qué JavaScript solo funciona después de abrir las herramientas de desarrollador en IE una vez?
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);
Sugiero que use el modo GWT Developer. Añade un poco de sobrecarga porque genera automáticamente la compilación y la asignación de código en el servidor de códigos, pero está bastante claro cuando surgen algunas excepciones en el lado del cliente de su 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
Yo 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?