Je suis en train de déboguer une application GWT et j'ai besoin d'imprimer quelques trucs sur la console à des fins de test. System.out.println
et GWT.log
ne fonctionnent pas. Quelqu'un a-t-il une idée ?
Réponses
Trop de publicités?Citation de la documentation :
L'ajout de la journalisation GWT est vraiment très simple, aussi simple que l'exemple de code suivant. Cependant - comprendre le fonctionnement de la journalisation, et comment le configurer correctement est important, donc s'il vous plaît prenez le temps de de lire le reste de ce document.
http://code.google.com/webtoolkit/doc/latest/DevGuideLogging.html
La façon la plus simple d'activer la journalisation est :
# 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");
J'avais besoin de faire cela dans le contexte d'une application GWT qui a été déployée sur un dispositif/émulateur Android via PhoneGap (et gwt-phonegap). Ni System.out.println() ni la journalisation GWT comme ci-dessus (avec déclaration de module) n'apparaissent dans le logcat d'Android, donc j'ai eu recours à un simple wrapper JSNI vers 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 );
}-*/;
Pour enregistrer dans la console du navigateur, vous pouvez le faire en utilisant le langage natif, d'une manière très simple. Très utile pour le débogage.
Si vous ajoutez une méthode native comme ci-dessous, vous pouvez lui envoyer une chaîne de caractères d'où vous voulez et elle l'enregistrera dans la console du navigateur.
public static native void console(String text)
/*-{
console.log(text);
}-*/;
Pour plus d'informations sur l'utilisation des natifs 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 en un seul morceau. J'ai également ajouté une solution de contournement possible pour les exceptions d'IE, comme décrit ici : Pourquoi JavaScript ne fonctionne-t-il qu'après avoir ouvert une fois les outils de développement dans IE ?
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);