GWT'de konsola nasıl yazdırılır


92

Bir GWT uygulamasında hata ayıklama yapıyorum ve test amacıyla konsola bazı şeyler yazdırmam gerekiyor. System.out.printlnve GWT.logçalışmıyor. Herhangi bir fikri olan var mı?


1
Burada yayınlanan cevapları deneyin: stackoverflow.com/questions/17463928/…
Chepech

Yanıtlar:


77

Belgelerden alıntı yapmak:

GWT günlüğünü eklemek, aşağıdaki kod örneği kadar basit, gerçekten oldukça basittir. Ancak - günlüğe kaydetmenin nasıl çalıştığını ve doğru şekilde nasıl yapılandırılacağını anlamak önemlidir, bu nedenle lütfen bu belgenin geri kalanını okumak için zaman ayırın.

http://code.google.com/webtoolkit/doc/latest/DevGuideLogging.html

Günlük kaydını etkinleştirmenin en basit yolu şudur:

# 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
Sanırım GWT.log ile ilgili yorum çalışmıyor.
checketts

11
Evet, GWT.log yalnızca DevMode'da çalışır, bu nedenle kodunuzu GWT derleyicisiyle derliyorsanız, GWT.log () 'dan hiçbir çıktı görmezsiniz.
Andrew Mackenzie

2
@Andrew Ooops. Sen gerçekten haklısın. Ben zaten bu konuda tüm unuttuğunu :) GWT.log gelmez, bu cevap beri çok uzun zaman oldu değil Web Modunda çalışır.
Strelok

1
Bu, bu hata nedeniyle IE'nin konsol kaydedicisinde çalışmayabilir . Yine de GWT 2.6'da düzeltildiğini söylüyorlar.
Brad Cupit

2
Kullandığınız Logger sınıfı içe aktarımı nedir? Bu gerçekten sinir bozucu.
CrazySabbath

50

Bunu PhoneGap (ve gwt-phonegap) aracılığıyla bir Android cihazına / öykünücüsüne dağıtılan bir GWT uygulaması bağlamında yapmam gerekiyordu. Ne System.out.println () ne de yukarıdaki gibi GWT günlüğü (modül bildirimi ile) Android'in logcat'inde görünmedi, bu yüzden console.log için basit bir JSNI sarıcıya başvurdum:

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

Tüm IE kullanıcıları için: Geliştirme araçları açılmadığında istisnaları önlemek için aramayı bir deneme yakalama bloğuna sarmanız veya burada belirtilen çözümlerden birini kullanmanız daha iyi olur: stackoverflow.com/q/7742781/1845976
schnatterer

Bu soruya bir bakar mısınız?
Stefan Falk

27

GWT 2.6.0 sürümünde, GWT.log yöntemi mesajı tarayıcı konsoluna yazar, yerel yöntemler yazmanıza gerek yoktur.


1
Bunun işe yarayacağını umuyordum. Bir GWT.log ("Bulması kolay") ekledim ve ardından tüm projede "Bulması kolay" dizesini aradım. Sadece kaynağımdaydı. GWT belgelerine baktım. "GWT.log" dosyasının yalnızca geliştirici penceresinde geliştirici modu için olduğunu söylüyor. gwtproject.org/doc/latest/DevGuideLogging.html
ChrisCantrell

Hayır, GWT.log yalnızca DEV / SUPERDEV modu içindir, ancak üretim kullanımı için değildir (GWT'nin derleyicisi tarafından kesilecektir).
Wladimir Schmidt

25

Tarayıcı konsolunda oturum açmak için bunu yerel kullanarak çok basit bir şekilde yapabilirsiniz. Hata ayıklamada çok yardımcı.

Aşağıdaki gibi yerel bir yöntem eklerseniz, ona istediğiniz yerden bir dize gönderebilirsiniz ve tarayıcı konsolunda oturum açacaktır.

public static native void console(String text)
/*-{
    console.log(text);
}-*/;

GWT'de yerel kullanımı hakkında daha fazla bilgi için: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html


Ayrıca parametreyi String olarak vermek yerine, ona başka bir şey verebilir (örnek: JavaScriptObject) ve bunu konsolide edebilirsiniz.
erkinyldz

7

Sadece mreppy ve Strelok yanıtlarında gösterilen farklı olasılıkları bir pasajda özetlemek . Ayrıca, burada açıklandığı gibi IE istisnaları için olası bir geçici çözüm ekledim: JavaScript, IE'de geliştirici araçlarını yalnızca bir kez açtıktan sonra neden çalışıyor?

    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

Yerel konsolu kullanan başka bir varyasyon ...

Bu sınıfı ekleyin:

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

Ardından, uygulamayı başlatırken olduğu gibi bir noktada onunla hata ayıklamayı etkinleştirin:

public class XXXXXX implements EntryPoint {
    @Override
    public void onModuleLoad() {
        Debug.enable();
        ...
    }
}

Öyleyse sadece böyle kullanın:

Debug.log("Hello World!");

0

Ben de bu sorunu yaşadım. GWT günlüğü çalışır, ancak tümü javascript'e dönüştürüldüğü için istemci çıktısına yazdırır, bu nedenle tarayıcınızın konsolunu görüntüleyin ve orada olurlar. Google Chrome'da sağ üstteki üç satırlı Özelleştir düğmesini tıklayın, Araçlar -> Geliştirici araçları'nı tıklayın; konsol açılır. Aranan ifadeleriniz orada olacak. Ayrıca Ctrl + Shift + I, onu getiren kısayoldur. Sunucuya yazdırmak istiyorsanız, günlükçü işleyicilerinin sırayla olduğuna inanıyorum.



0

GWT Geliştirici modunu kullanmanızı öneririm Kod sunucusunda otomatik derleme ve kod ayırmaya biraz ek yük getirir, ancak uygulamanızın istemci tarafında bazı istisnalar ortaya çıktığında oldukça açıktır. Demek istediğim, bazen krom konsolu (veya firebug veya yerleşik tarayıcı hata ayıklama aracı) bu durumlarda çok fazla şey söylemez, güven bana, bir NullPointerException bulmak, ne olduğunu anlamaya çalıştığınızda başınızı belaya sokar kodunuzu uyararak.


0

Tarayıcı konsoluna yazdırmak için şuna benzer bir şey kullanıyorum:

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
        });
    }
}-*/;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.