Cara mencetak ke konsol di GWT


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");

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

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.


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


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);

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

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?



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.


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
        });
    }
}-*/;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.