Comment imprimer sur la console dans GWT

Je débogue une application GWT et je dois imprimer des éléments sur la console à des fins de test. System.out.println et GWT.log ne fonctionnent pas. Quelqu’un a-t-il une idée?

Citant la documentation:

L’ajout de la journalisation GWT est vraiment simple, aussi simple que l’exemple de code suivant. Cependant, il est important de comprendre comment fonctionne la journalisation et de la configurer correctement. Prenez donc le temps de lire le rest de ce document.

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

Le moyen le plus simple d’activer la journalisation est le suivant:

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

Je devais le faire dans le contexte d’une application GWT déployée sur un périphérique / émulateur Android via PhoneGap (et gwt-phonegap). Ni System.out.println () ni la journalisation GWT comme ci-dessus (avec la déclaration du module) n’apparaissaient dans le logcat d’Android, j’ai donc eu recours à un simple wrapper JSNI pour 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( Ssortingng message) /*-{ console.log( "me:" + message ); }-*/; 

Dans GWT version 2.6.0, la méthode GWT.log écrit le message sur la console du navigateur, vous n’avez pas besoin d’écrire des méthodes natives.

Pour vous connecter à la console des navigateurs, vous pouvez le faire de manière très simple. Très utile dans le débogage.

Si vous ajoutez une méthode native comme ci-dessous, vous pouvez lui envoyer une chaîne depuis l’endroit souhaité et la connecter dans la console du navigateur.

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

Pour plus d’informations sur l’utilisation de natif dans GWT: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html

Il suffit de résumer les différentes possibilités présentées dans les réponses de mreppy et Strelok dans un extrait. J’ai également ajouté une solution de contournement possible pour les exceptions IE, comme décrit ici: Pourquoi JavaScript ne fonctionne-t-il qu’après avoir ouvert les outils de développement dans IE une fois?

  java.util.logging.Logger logger = Logger.getLogger(this.getClass().getSimpleName()); native void jsConsoleLog(Ssortingng message) /*-{ try { console.log(message); } catch (e) { } }-*/; private void log(final Ssortingng 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); 

Encore une autre variante utilisant la console native …

Ajouter cette classe:

 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 Ssortingng s ) { if( isEnabled_ ) nativeConsoleLog( s ); } private static native void nativeConsoleLog( Ssortingng s ) /*-{ console.log( s ); }-*/; } 

Ensuite, activez le débogage à un moment donné, comme au démarrage de l’application:

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

Alors, utilisez-le comme ça:

 Debug.log("Hello World!"); 

J’ai eu ce problème aussi. Le journal GWT fonctionne, mais comme il est entièrement converti en javascript, il imprime sur la sortie du client, il suffit donc de voir la console de votre navigateur et ils seront là. Dans Google Chrome, cliquez sur le bouton Personnaliser à trois lignes en haut à droite, cliquez sur Outils -> Outils pour développeurs et la console apparaîtra. Vos déclarations recherchées seront là. En outre, Ctrl + Shift + I est le raccourci qui le fait apparaître. Si vous souhaitez imprimer sur le serveur, je pense que les gestionnaires de consignateurs sont en ordre?

L’URL de documentation dans la première réponse donne déjà l’option de configuration différente pour se connecter à différents endroits. Ce cadre que j’ai écrit vous offre une API utile et vous permet de choisir votre implémentation de journalisation côté serveur. Jetez un oeil: https://code.google.com/p/gwt-usefull-logging/

Je suggère que vous utilisiez le mode développeur GWT. Il ajoute un peu de surcharge à cause de la compilation automatique et de l’allocation de code sur le serveur de code, mais c’est assez clair lorsque des exceptions surviennent du côté client de votre application. Je veux dire, parfois, la console chrome (ou firebug ou tout autre outil intégré de débogage du navigateur) ne dit pas grand chose dans ces situations, croyez-moi, trouver une exception NullPointerException est pénible lorsque vous essayez de comprendre ce qui se passe en alertant votre code.

Pour imprimer sur la console du navigateur, j’utilise quelque chose comme ceci:

EventLogger.java

 public class EventLogger { public static void logEvent(Ssortingng subsys, Ssortingng grp, Ssortingng type) { logEvent(GWT.getModuleName(), subsys, grp, Duration.currentTimeMillis(), type); } public static native void logEvent(Ssortingng module, Ssortingng subsys, Ssortingng grp, double millis, Ssortingng type) /*-{ if ($wnd.__gwtStatsEvent) { $wnd.__gwtStatsEvent({ 'moduleName':module, 'subSystem':subsys, 'evtGroup':grp, 'millis':millis, 'type':type }); } }-*/; }