Saya men-debug aplikasi GWT dan saya perlu mencetak beberapa hal ke konsol untuk tujuan pengujian. System.out.println
dan GWT.log
tidak bekerja. Apakah ada yang punya ide?
Jawaban:
Mengutip dokumentasi:
Menambahkan logging GWT sangat sederhana, sesederhana contoh kode berikut. Namun - memahami cara kerja logging, dan cara mengonfigurasinya dengan benar adalah penting, jadi harap luangkan waktu untuk membaca sisa dokumen ini.
http://code.google.com/webtoolkit/doc/latest/DevGuideLogging.html
Cara termudah untuk mengaktifkan logging adalah:
# 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");
Saya perlu melakukan ini dalam konteks aplikasi GWT yang diterapkan ke perangkat / emulator Android melalui PhoneGap (dan gwt-phonegap). Baik System.out.println () maupun GWT logging seperti di atas (dengan deklarasi modul) muncul di logcat Android, jadi saya menggunakan pembungkus JSNI sederhana ke 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 );
}-*/;
Di GWT versi 2.6.0, metode GWT.log menulis pesan ke konsol browser, Anda tidak perlu menulis metode native.
Untuk masuk ke konsol browser Anda dapat melakukannya menggunakan native, dengan cara yang sangat sederhana. Sangat membantu dalam debugging.
Jika Anda menambahkan metode asli seperti di bawah ini, Anda dapat mengirim string ke sana dari tempat yang Anda inginkan dan itu akan mencatatnya di konsol browser.
public static native void console(String text)
/*-{
console.log(text);
}-*/;
Untuk informasi lebih lanjut tentang menggunakan native di GWT: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
Hanya menyimpulkan berbagai kemungkinan yang ditunjukkan dalam jawaban mreppy dan Strelok dalam satu cuplikan. Saya juga menambahkan satu solusi yang mungkin untuk pengecualian IE seperti yang dijelaskan di sini: Mengapa JavaScript hanya bekerja setelah membuka alat pengembang di IE sekali?
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);
Variasi lain menggunakan konsol asli ...
Tambahkan kelas ini:
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 ); }-*/;
}
Kemudian, aktifkan debugging dengannya di beberapa titik, seperti saat memulai aplikasi:
public class XXXXXX implements EntryPoint {
@Override
public void onModuleLoad() {
Debug.enable();
...
}
}
Kemudian gunakan saja seperti ini:
Debug.log("Hello World!");
Saya punya masalah ini juga. Log GWT berfungsi tetapi karena semuanya dikonversi ke javascript, ini mencetak ke output klien, jadi lihat saja konsol browser Anda dan mereka akan ada di sana. Di Google Chrome klik tombol Sesuaikan tiga baris di kanan atas, klik Alat -> Alat pengembang dan konsol akan muncul. Pernyataan yang Anda cari akan ada di sana. Selain itu, Ctrl + Shift + I adalah pintasan yang menampilkannya. Jika Anda ingin mencetak ke server, saya yakin penangan logger dan semacamnya sudah beres?
Url dokumentasi di jawaban pertama sudah memberikan opsi konfigurasi yang berbeda untuk masuk ke tempat yang berbeda. Kerangka yang saya tulis ini menawarkan Anda api yang berguna dan memungkinkan Anda memilih implementasi logging sisi server. Lihat: https://code.google.com/p/gwt-usefull-logging/
Saya sarankan Anda menggunakan mode Pengembang GWT. Ini menambahkan sedikit overhead yang menyebabkan kompilasi otomatis dan alokasi kode pada server kode, tetapi cukup jelas ketika beberapa pengecualian muncul di sisi klien aplikasi Anda. Maksud saya, kadang-kadang konsol chrome (atau firebug atau alat bawaan browser debugging apa pun) tidak berbicara terlalu banyak dalam situasi itu, percayalah, menemukan NullPointerException sangat merepotkan ketika Anda mencoba mencari tahu apa yang terjadi dengan memberi tahu kode Anda.
Untuk mencetak ke konsol browser saya menggunakan sesuatu seperti ini:
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
});
}
}-*/;
}