Antworten:
Zitieren der Dokumentation:
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.
http://code.google.com/webtoolkit/doc/latest/DevGuideLogging.html
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 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:
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 );
}-*/;
In GWT Version 2.6.0 schreibt die Methode GWT.log eine Nachricht in die Browserkonsole. Sie müssen keine nativen Methoden schreiben.
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.
public static native void console(String text)
/*-{
console.log(text);
}-*/;
Weitere Informationen zur Verwendung von Native in GWT finden Sie unter: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
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?
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);
Noch eine Variation mit der nativen Konsole ...
Fügen Sie diese Klasse hinzu:
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 ); }-*/;
}
Aktivieren Sie dann irgendwann das Debuggen, z. B. beim Starten der App:
public class XXXXXX implements EntryPoint {
@Override
public void onModuleLoad() {
Debug.enable();
...
}
}
Dann benutze es einfach so:
Debug.log("Hello World!");
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.
Zum Drucken auf der Browserkonsole verwende ich Folgendes:
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
});
}
}-*/;
}