Saya men-debug aplikasi GWT dan saya perlu mencetak beberapa hal ke konsol untuk tujuan pengujian. System.out.printlndan GWT.logtidak bekerja. Apakah ada yang punya ide?
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.
# 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 pikir komentar tentang GWT.log tidak berfungsi adalah alasan mengapa Anda ditolak.
checketts
11
Ya, GWT.log hanya berfungsi di DevMode, jadi jika Anda mengompilasi kode dengan kompiler GWT, Anda tidak akan pernah melihat output apa pun dari GWT.log ().
Andrew Mackenzie
2
@Android_Oops. Anda memang benar. Jawaban ini sudah lama sekali, sehingga saya sudah melupakan semuanya :) GWT.log tidak berfungsi di Mode Web.
Strelok
1
Ini mungkin tidak bekerja di logger konsol IE karena bug ini . Mereka mengatakan itu diperbaiki di GWT 2.6.
Brad Cupit
2
Apa impor kelas Logger yang Anda gunakan? Ini benar-benar membuat frustrasi.
CrazySabbath
50
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:
publicvoidonModuleLoad(){
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
...
}
nativevoidconsoleLog( String message)/*-{
console.log( "me:" + message );
}-*/;
Untuk semua pengguna IE: Untuk menghindari pengecualian ketika alat pengembangan tidak dibuka, Anda sebaiknya membungkus panggilan dalam blok coba tangkap atau gunakan salah satu solusi yang dinyatakan di sini: stackoverflow.com/q/7742781/1845976
Saya berharap ini akan berhasil. Saya menambahkan GWT.log ("Mudah ditemukan") dan kemudian mencari seluruh proyek untuk string "Mudah ditemukan". Itu hanya dari sumber saya. Saya sudah memeriksa dokumen GWT. Ia mengatakan "GWT.log" hanya untuk mode pengembang di jendela dev. gwtproject.org/doc/latest/DevGuideLogging.html
ChrisCantrell
Tidak, GWT.log hanya untuk mode DEV / SUPERDEV, tetapi tidak untuk penggunaan produksi (ini akan dipotong oleh kompiler GWT).
Wladimir Schmidt
25
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.
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.
Jawaban:
Mengutip dokumentasi:
http://code.google.com/webtoolkit/doc/latest/DevGuideLogging.html
Cara termudah untuk mengaktifkan logging adalah:
sumber
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 ); }-*/;
sumber
Di GWT versi 2.6.0, metode GWT.log menulis pesan ke konsol browser, Anda tidak perlu menulis metode native.
sumber
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
sumber
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);
sumber
Variasi lain menggunakan konsol asli ...
Tambahkan kelas ini:
Kemudian, aktifkan debugging dengannya di beberapa titik, seperti saat memulai aplikasi:
Kemudian gunakan saja seperti ini:
sumber
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?
sumber
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/
sumber
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.
sumber
Untuk mencetak ke konsol browser saya menggunakan sesuatu seperti ini:
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 }); } }-*/; }
sumber