Ich debugge eine GWT-Anwendung und muss zu Testzwecken einige Dinge auf die Konsole drucken. System.out.printlnund GWT.lognicht arbeiten. Hat jemand irgendwelche Ideen?
Das Hinzufügen der GWT-Protokollierung ist sehr einfach, so einfach wie das folgende Codebeispiel. Es ist jedoch wichtig zu verstehen, wie die Protokollierung funktioniert und wie sie korrekt konfiguriert wird. Nehmen Sie sich daher bitte die Zeit, den Rest dieses Dokuments zu lesen.
Der einfachste Weg, die Protokollierung zu aktivieren, ist:
# 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");
Ich denke, der Kommentar zu GWT.log funktioniert nicht, weshalb Sie abgelehnt wurden.
Checketts
11
Ja, GWT.log funktioniert nur im DevMode. Wenn Sie also Ihren Code mit dem GWT-Compiler kompilieren, werden Sie nie eine Ausgabe von GWT.log () sehen.
Andrew Mackenzie
2
@ Andrew Ups. Sie sind in der Tat richtig. Es ist seit dieser Antwort so lange her, dass ich schon alles darüber vergessen :) GWT.log funktioniert nicht im Web - Modus arbeiten.
Strelok
1
Dies funktioniert im Konsolenlogger des IE aufgrund dieses Fehlers möglicherweise nicht . Sie sagen, dass es in GWT 2.6 behoben ist.
Brad Cupit
2
Was ist der von Ihnen verwendete Logger-Klassenimport? Das ist wirklich frustrierend.
CrazySabbath
49
Ich musste dies im Kontext einer GWT-Anwendung tun, die über PhoneGap (und gwt-phonegap) auf einem Android-Gerät / Emulator bereitgestellt wurde. Weder die System.out.println () noch die GWT-Protokollierung wie oben (mit Moduldeklaration) wurden in Android's logcat angezeigt, daher habe ich auf einen einfachen JSNI-Wrapper für console.log zurückgegriffen:
publicvoid onModuleLoad(){Logger logger =Logger.getLogger("Test1.java");
logger.log(Level.INFO,"ash: starting onModuleLoad (1)");// not in logcatSystem.out.println("ash: starting onModuleLoad (2)");// not in logcat
consoleLog("ash: starting onModuleLoad (3)");// This shows up...}nativevoid consoleLog(String message)/*-{
console.log( "me:" + message );
}-*/;
Für alle IE-Benutzer: Um Ausnahmen zu vermeiden, wenn die Entwicklungstools nicht geöffnet werden, sollten Sie den Aufruf besser in einen Try-Catch-Block einschließen
Ich hatte gehofft, dass das funktionieren würde. Ich habe ein GWT.log ("Leicht zu finden") hinzugefügt und dann das gesamte Projekt nach der Zeichenfolge "Leicht zu finden" durchsucht. Es war nur in meiner Quelle. Ich habe die GWT-Dokumente überprüft. Es heißt, dass "GWT.log" nur für den Dev-Modus im Dev-Fenster ist. gwtproject.org/doc/latest/DevGuideLogging.html
ChrisCantrell
Nein, GWT.log ist nur für den DEV / SUPERDEV-Modus vorgesehen, jedoch nicht für den Produktionsbetrieb (wird vom GWT-Compiler ausgeschnitten).
Wladimir Schmidt
24
Um sich bei der Browserkonsole anzumelden, können Sie dies auf sehr einfache Weise mit Native tun. Sehr hilfreich beim Debuggen.
Wenn Sie eine native Methode wie unten hinzufügen, können Sie eine Zeichenfolge an die gewünschte Stelle senden, die in der Browserkonsole protokolliert wird.
java.util.logging.Logger logger =Logger.getLogger(this.getClass().getSimpleName());nativevoid jsConsoleLog(String message)/*-{
try {
console.log(message);
} catch (e) {
}
}-*/;privatevoid log(finalString 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);
Ich hatte auch dieses Problem. Das GWT-Protokoll funktioniert, aber da alles in Javascript konvertiert ist, wird es auf der Client-Ausgabe gedruckt. Sehen Sie sich also einfach die Konsole Ihres Browsers an und sie werden dort sein. Klicken Sie in Google Chrome oben rechts auf die dreizeilige Schaltfläche Anpassen, klicken Sie auf Extras -> Entwicklertools. Die Konsole wird angezeigt. Ihre begehrten Aussagen werden dort sein. Außerdem ist Strg + Umschalt + I die Verknüpfung, die es aufruft. Wenn Sie auf dem Server drucken möchten, glaube ich, dass Logger-Handler und dergleichen in Ordnung sind?
Die Dokumentations-URL in der ersten Antwort bietet bereits die unterschiedliche Konfigurationsoption, um sich an verschiedenen Stellen anzumelden. Dieses Framework, das ich geschrieben habe, bietet Ihnen eine nützliche API und ermöglicht Ihnen die Auswahl Ihrer serverseitigen Protokollierungsimplementierung. Schauen Sie mal rein :
https://code.google.com/p/gwt-usefull-logging/
Ich schlage vor, Sie verwenden den GWT-Entwicklermodus. Dies führt zu einem geringen Overhead, da die automatische Kompilierung und Codezuweisung auf dem Codeserver erfolgt. Es ist jedoch ziemlich klar, wenn auf der Clientseite Ihrer Anwendung einige Ausnahmen auftreten. Ich meine, manchmal sagt die Chrome-Konsole (oder ein Firebug oder ein integriertes Tool zum Debuggen von Browsern) in solchen Situationen nicht zu viel. Vertrauen Sie mir, das Finden einer NullPointerException ist ein Schmerz im Nacken, wenn Sie versuchen, herauszufinden, was passiert indem Sie Ihren Code alarmieren.
Antworten:
Zitieren der Dokumentation:
http://code.google.com/webtoolkit/doc/latest/DevGuideLogging.html
Der einfachste Weg, die Protokollierung zu aktivieren, ist:
quelle
Ich musste dies im Kontext einer GWT-Anwendung tun, die über PhoneGap (und gwt-phonegap) auf einem Android-Gerät / Emulator bereitgestellt wurde. Weder die System.out.println () noch die GWT-Protokollierung wie oben (mit Moduldeklaration) wurden in Android's logcat angezeigt, daher habe ich auf einen einfachen JSNI-Wrapper für console.log zurückgegriffen:
quelle
In GWT Version 2.6.0 schreibt die Methode GWT.log eine Nachricht in die Browserkonsole. Sie müssen keine nativen Methoden schreiben.
quelle
Um sich bei der Browserkonsole anzumelden, können Sie dies auf sehr einfache Weise mit Native tun. Sehr hilfreich beim Debuggen.
Wenn Sie eine native Methode wie unten hinzufügen, können Sie eine Zeichenfolge an die gewünschte Stelle senden, die in der Browserkonsole protokolliert wird.
Weitere Informationen zur Verwendung von Native in GWT finden Sie unter: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
quelle
Fassen Sie einfach die verschiedenen Möglichkeiten zusammen, die in den Antworten von mreppy und Strelok in einem Ausschnitt gezeigt werden. Ich habe auch eine mögliche Problemumgehung für IE-Ausnahmen hinzugefügt, wie hier beschrieben: Warum funktioniert JavaScript nur nach einmaligem Öffnen der Entwicklertools im IE?
quelle
Noch eine Variation mit der nativen Konsole ...
Fügen Sie diese Klasse hinzu:
Aktivieren Sie dann irgendwann das Debuggen, z. B. beim Starten der App:
Dann benutze es einfach so:
quelle
Ich hatte auch dieses Problem. Das GWT-Protokoll funktioniert, aber da alles in Javascript konvertiert ist, wird es auf der Client-Ausgabe gedruckt. Sehen Sie sich also einfach die Konsole Ihres Browsers an und sie werden dort sein. Klicken Sie in Google Chrome oben rechts auf die dreizeilige Schaltfläche Anpassen, klicken Sie auf Extras -> Entwicklertools. Die Konsole wird angezeigt. Ihre begehrten Aussagen werden dort sein. Außerdem ist Strg + Umschalt + I die Verknüpfung, die es aufruft. Wenn Sie auf dem Server drucken möchten, glaube ich, dass Logger-Handler und dergleichen in Ordnung sind?
quelle
Die Dokumentations-URL in der ersten Antwort bietet bereits die unterschiedliche Konfigurationsoption, um sich an verschiedenen Stellen anzumelden. Dieses Framework, das ich geschrieben habe, bietet Ihnen eine nützliche API und ermöglicht Ihnen die Auswahl Ihrer serverseitigen Protokollierungsimplementierung. Schauen Sie mal rein : https://code.google.com/p/gwt-usefull-logging/
quelle
Ich schlage vor, Sie verwenden den GWT-Entwicklermodus. Dies führt zu einem geringen Overhead, da die automatische Kompilierung und Codezuweisung auf dem Codeserver erfolgt. Es ist jedoch ziemlich klar, wenn auf der Clientseite Ihrer Anwendung einige Ausnahmen auftreten. Ich meine, manchmal sagt die Chrome-Konsole (oder ein Firebug oder ein integriertes Tool zum Debuggen von Browsern) in solchen Situationen nicht zu viel. Vertrauen Sie mir, das Finden einer NullPointerException ist ein Schmerz im Nacken, wenn Sie versuchen, herauszufinden, was passiert indem Sie Ihren Code alarmieren.
quelle
Zum Drucken auf der Browserkonsole verwende ich Folgendes:
EventLogger.java
quelle