web-dev-qa-db-fra.com

Comment imprimer sur la console dans GWT

Je suis en train de déboguer une application GWT et je dois imprimer des données sur la console à des fins de test. System.out.println et GWT.log ne fonctionne pas. Quelqu'un a-t-il une idée?

88
user1167575

Citer la documentation:

L'ajout de la journalisation GWT est vraiment très simple, aussi simple que l'exemple de code suivant. Toutefois, il est important de comprendre le fonctionnement de la journalisation et la manière de la configurer correctement. Prenez donc le temps de lire le reste de ce document.

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

Le moyen le 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");
73
Strelok

J'avais besoin de 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) apparaissant dans le logcat d'Android, j'ai donc 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 );
  }-*/;
45
mreppy

Dans la version 2.6.0 de GWT, la méthode GWT.log écrit un message sur la console du navigateur. Il n'est pas nécessaire d'écrire des méthodes natives.

25
zergood

Pour vous connecter à la console des navigateurs, vous pouvez le faire en mode natif, de 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 à partir de votre choix et la consigner dans la console du navigateur.

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

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

21
erkinyldz

Résumant simplement les différentes possibilités montré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 telles que décrites 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(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);
6
schnatterer

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 String s ) 
    { if( isEnabled_ ) nativeConsoleLog( s ); }

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

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

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

Ensuite, utilisez-le comme ceci:

Debug.log("Hello World!");
5
BuvinJ

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

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
        });
    }
}-*/;
}
0
Eugene

Je vous suggère d'utiliser mode développeur GWT Cela ajoute un peu de charge supplémentaire, ce qui cause la compilation automatique et l'allocation de code sur le serveur de code, mais il est assez clair que des exceptions surviennent du côté client de votre application. Je veux dire, quelques fois chrome (ou un outil intégré de débogage de navigateur, quel que soit le navigateur)) ne dit pas trop dans ces situations, croyez-moi, trouver une NullPointerException est un problème. lorsque vous essayez de comprendre ce qui se passe en alertant votre code.

0
user743489

L'URL de la 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. Regardez: https://code.google.com/p/gwt-usefull-logging/

0
François Wauquier

J'ai eu ce problème aussi. Le journal GWT fonctionne, mais comme tout est converti en javascript, il est imprimé sur la sortie du client. Il vous suffit donc de visualiser la console de votre navigateur pour y accéder. Dans Google Chrome, cliquez sur le bouton Personnaliser de la triple ligne en haut à droite, cliquez sur Outils -> Outils de développement. La console s'affichera. Les instructions que vous recherchez seront présentes. Ctrl + Shift + I est le raccourci qui l’a fait apparaître. Si vous voulez imprimer sur le serveur, je crois que les gestionnaires d’enregistreur et autres sont en ordre?

0
Glenninator