Cara mencetak ke konsol di GWT

92

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?

andrewsi
sumber
1
Coba jawaban yang diposting di sini: stackoverflow.com/questions/17463928/…
Chepech

Jawaban:

77

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");
Strelok
sumber
1
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:

  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 );
  }-*/;
mreppy
sumber
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
schnatterer
Bisakah Anda melihat pertanyaan ini ?
Stefan Falk
27

Di GWT versi 2.6.0, metode GWT.log menulis pesan ke konsol browser, Anda tidak perlu menulis metode native.

zergood
sumber
1
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.

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

erkinyldz.dll
sumber
Selain itu, alih-alih memberikan parameter sebagai String, Anda dapat memberikannya sesuatu yang lain (contoh: JavaScriptObject) dan mengkonsolkannya.
erkinyldz
7

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);
schnatterer
sumber
5

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!");
BuvinJ
sumber
0

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?

Glenninator
sumber
0

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/

François Wauquier
sumber
0

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
0

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
        });
    }
}-*/;
}
Ievgen Derevianko
sumber